我是C语言初学者,我想请各位大侠帮我看一下下面这个程序哪里错了
#include <stdio.h>
#define MaxVertexNum 100 //最大顶点数设为 100
#define MaxCost 9999 /* 边的权值最大为 9999 */
typedef char VertexType; /* 顶点类型设为字符型 */
typedef int EdgeType; /* 边的权值设为整型 */
typedef struct
{
VertexType vexs[MaxVertexNum]; /* 存放顶点信息 */
EdgeType edges[MaxVertexNum][MaxVertexNum]; /* 存放邻接关系 */
int n,e; /*顶点数和边数*/
}Mgraph;
void CreateMGraph(Mgraph *G)
{
int i,j,k,w;
printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n") ;
scanf("%d,%d",&(G->n),&(G->e));
printf("请输入顶点信息:\n");
for(i=0;i<G->n;i++)
scanf("\n%c",&(G->vexs[i]));
for(i=0;i<G->n;i++)
for(j=0;j<G->n;j++)
G->edges[i][j]=MaxCost;
printf(" 请 输 入 每 条 边 对 应 的 两 个 顶 点 的 序 号 ( 输 入 格 式 为:i,j,w):\n");
for(k=0;k<G->e;k++)
{
scanf("%d,%d,%d",&i,&j,&w); //w表示的是权值
G->edges[i][j]=w;
}
}
void ShortestPath(Mgraph *G,int P[],int D[])
{
int final[MaxVertexNum],i,j,k,min;
final[0]=1; /* 初始时集合 S 中只有 0 号顶点 */
D[0]=0; P[0]=-1; /* 0 号顶点 无前驱顶点 ,用-1 表示 */
for(i=1;i<G->n;i++)
{
final[i]=0;
D[i]=G->edges[0][i];
P[i]=0;
} /* P[i]存放 i 号顶点的前驱顶点 */
for(i=1;i<G->n; i++) /*重复 G->n-1 次*/
{
min=MaxCost;
for(k=0;k<G->n;k++)
if(final[k]==0&&D[k]<min)
{
j=k;min=D[k];
}
final[j]=1; /* 将顶点 j 加入集合 S */
for(k=0;k<G->n;k++)
if(final[k]==0 && D[j]+G->edges[j][k]< D[k])
{
D[k]=D[j]+G->edges[j][k];
P[k]=j;
}
}
}
void main()
{
Mgraph G;
int P[MaxVertexNum],D[MaxVertexNum];
int i,pre;
CreateMGraph(&G);
ShortestPath(&G,P,D);
printf("\n\n\n 从源点到各点最短路径权值及路径如下:\n");
for(i=1;i<G.n; i++)
{
printf("%d: %d",D[i],i);
pre= P[i];
while(pre>=0)
{
printf("<-%d",pre);
pre=P[pre];
}
printf("\n");
}
}
这是一个关于最短路径算法在动态路由算法中的应用,无法调试成功,所以请各位帮帮忙,急用这个程序。
[解决办法]
帮你顶下吧,光输入都这么麻烦
[解决办法]
哪里错了,你到底是哪里不对呀?
[解决办法]
先调试看看哪错了。。。
这样才会得到提高。。。
[解决办法]
可以啊,我在VC2010下试了。是可以的
[解决办法]
无法调试成功,是什么意思?
问题尽可能说清楚点。。。
[解决办法]
在占用内存空间较大的局部数组声明的前面加static将其从堆栈数据段挪到全局数据段即可。
static Mgraph G;
static int P[MaxVertexNum],D[MaxVertexNum];
[解决办法]
VC++6.0通过
[解决办法]
算法有问题是么?LZ
请输入顶点数和边数(输入格式为:顶点数,边数):
4,6
请输入顶点信息:
a
b
c
d
请 输 入 每 条 边 对 应 的 两 个 顶 点 的 序 号 ( 输 入 格 式 为:i,j,w):
0,1,1
1,2,3
2,3,3
3,0,4
0,2,5
1,3,6
从源点到各点最短路径权值及路径如下:
1: 1<-0
4: 2<-1<-0
7: 3<-1<-0
Press any key to continue