求助!程序有一段执行不出来!
#include<stdio.h>#include<stdlib.h>
#define MVNum 100
#define Maxint 32767
enum boolean{FALSE,TRUE};
typedef char VertexType;
typedef int Adjmatrix;
typedef struct{
VertexType vexs[MVNum];
Adjmatrix arcs[MVNum][MVNum];
}MGraph;
void CreateMGraph(MGraph *G,int n,int e)
{int arcs[MVNum][MVNum];
int i,j,k,w;
for(i=1;i<=n;i++)
G->vexs[i]=(char)i;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
G->arcs[i][j]=Maxint;
printf("输入 %d 条边的 i,j,w: \n",e);
for(k=1;k<=e;k++){
scanf("%d,%d,%d",&i,&j,&w);
G->arcs[i][j]=w;
}
printf("有向图的存储结构建立完毕!\n");
}
void Dijkstra(MGraph *G,int v1,int n)
{
int D2[MVNum],P2[MVNum];
int v,i,w,min;
enum boolean S[MVNum];
for(v=1;v<=n;v++){
S[v]=FALSE;
D2[v]=G->arcs[v1][v];
if(D2[v]<Maxint)
P2[v]=v1;
else
P2[v]=0;
}
D2[v1]=0;S[v1]=TRUE;
for(i=2;i<n;i++){
min=Maxint;
for(w=1;w<=n;w++)
if(!S[w] && D2[w]<min)
{v=w;min=D2[w];}
S[v]=TRUE;
for(w=1;w<=n;w++)
if(!S[w]&&(D2[v]+G->arcs[v][w]<D2[w])){
D2[w]=D2[v]+G->arcs[v][w];
P2[w]=v;
}//End_if
}//End_for
printf("路径长度 路径\n");
for(i=1;i<=n;i++){
printf("%5d",D2[i]);
printf("%5d",i);v=P2[i];
while(v!=0){
printf("<-%d",v);
v=P2[v];
}
printf("\n");
}
}
void Floyd(MGraph *G,int n)
{ int D[MVNum][MVNum],P[MVNum][MVNum];
int i,j,k,v,w;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(G->arcs[i][j]!=Maxint)
P[i][j]=j;
else
P[i][j]=0;
D[i][j]=G->arcs[i][j];
}
for(k=1;k<=n;k++)
{for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{if(D[i][k]+D[k][j]<D[i][j]){
D[i][j]=D[i][k]+D[k][j];
P[i][j]=P[i][k];
}
}
}
}
int D1[MVNum],P1[MVNum];
int D[MVNum][MVNum],P[MVNum][MVNum];
void main()
{MGraph *G;
int m,n,e,v,w,k;
int xz=1;
G=(MGraph *)malloc(sizeof(MGraph));
printf("简单的模拟兰州交通网络图\n");
printf("输入图中顶点个数和边数 n,e: ");
scanf("%d,%d",&n,&e);
CreateMGraph(G,n,e);
while(xz!=0){
printf("*****求地方之间的最短路径*****\n");
printf("==============================\n");
printf("1,求一个地方到所有地方的最短路径 \n");
printf("2,求任意两个地方之间的最短路径 \n");
printf("===============================\n");
printf(" 请选择: 1 or 2,选择 0 退出: ");
scanf("%d",&xz);
if(xz==2){
Floyd(G,n);
printf("输入起点和终点: v,w: ");
scanf("%d,%d",&v,&w);
k=P[v][w];
if(k==0)
printf("顶点 %d 到 %d 无路径! \n",v,w);
else
{printf("从顶点 %d 到 %d 的最短路径是: %d",v,w,v);
while(k!=w){
printf("->%d",k);
k=P[k][w];
}
printf("->%d",w);
printf(" 路径长度: %d\n",D[v][w]) ;
}
}
else
if(xz==1){
printf("求单源路径,输入起点 v: ");
scanf("%d",&v);
Dijkstra(G,v,n);
}
}
printf("结束求最短路径!\n");
}
//图:n=6e=8
i,j,w:
1,2,5,
1,6,10
2,3,12
2,4,14
2,5,8
3,4,6
5,3,4
5,6,7
调用Floyd算法的第二种形式 任意2地之间的最短距离出不来 每次都是“——到——无路径”!!!怎么办啊