连接,编译都没问题,但运行不出,求解
#include<stdlib.h>#include<conio.h>
#include<malloc.h>
#include<string.h>
#include<stdio.h>
#include<iostream.h>
#define MAX 1000
#define MAXLEN 9
typedef struct{char name[20];int num;}VEXTYPE;
typedef struct{char Menu(void);
VEXTYPE vex[MAXLEN];
int arc[MAXLEN][MAXLEN];
int vexnum,arcnum;
}MGraph;
void InitGraph(MGraph *G)
{int i,j;
G->vexnum=9;
G->arcnum=15;
for(i=0;i<G->vexnum;i++)
G->vex[i].num=i;
strcpy(G->vex[0].name,"北门山");
strcpy(G->vex[1].name,"汽车站");
strcpy(G->vex[2].name,"县医院");
strcpy(G->vex[3].name,"火车站");
strcpy(G->vex[4].name,"凤山公园");
strcpy(G->vex[5].name,"体育馆");
strcpy(G->vex[6].name,"南门街");
strcpy(G->vex[7].name,"一中");
strcpy(G->vex[8].name,"东门桥");
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
G->arc[i][j]=MAX;
G->arc[0][1]=70;
G->arc[0][6]=50;
G->arc[0][7]=60;
G->arc[1][2]=22;
G->arc[1][3]=55;
G->arc[1][7]=10;
G->arc[2][3]=45;
G->arc[3][4]=35;
G->arc[3][8]=40;
G->arc[4][5]=25;
G->arc[4][8]=30;
G->arc[5][6]=15;
G->arc[5][8]=20;
G->arc[6][7]=80;
G->arc[7][8]=5;
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
G->arc[j][i]=G->arc[i][j];
}
void Menu()
{printf("需要输出顶点信息请按0\n");
printf("需要边的信息请按1\n");
printf("需要修改请按2\n");
printf("需要求最短路径请按3\n");
printf("需要删除某个顶点请按4\n");
printf("需要插入某个顶点请按5\n");
printf("需要删除某条边请按6\n");
printf("需要插入某条边请按7\n");
printf("需要退出请按8\n");
}
void PutOutVex(MGraph *G)
{int a;
for(a=0;a<G->vexnum;a++)
printf("G->vex[a].num,G->vex[a].name");
}
void PutOutArc(MGraph *G)
{int b;
int c;
for(b=0;b<G->vexnum;b++)
for(c=0;c<G->vexnum;c++)
if(G->arc[b][c]<MAX)
printf("%s,%s,%d\n",G->vex[b].name,G->vex[c].name,G->arc[b][c]);}
void change(MGraph *G)
{int a1,a2,length;
printf("change\n");
scanf("%d",&a1);
scanf("%d",&a2);
printf("length:");
scanf("%d",&length);
G->arc[a1][a2]=G->arc[a2][a1]=length;}
void Dijkstra(MGraph *G)
{int v,w,i,j,min,t=0,x,v0,v1;
int final[20],D[20],p[20][20];
printf("请输入源顶点:\n");
scanf("%d",&v0);
if(v0<0||v0>G->vexnum)
{printf("此点编号不存在!请重新输入顶点编号:");
scanf("%d",&v0);}
printf("请输入结束顶点:\n");
scanf("%d",&v1);
if(v1<0||v1>G->vexnum)
{printf("此点编号不存在!请重新输入顶点编号:");
scanf("%d",&v1);}
for(v=0;v<G->vexnum;v++)
{D[v]=G->arc[v0][v1];
for(w=0;w<G->vexnum;w++)
p[v][w]=0;
if(D[v]<MAX)
{p[v][v0]=1;p[v][v]=1;}}
D[v0]=0;final[v0]=1;
for(i=1;i<G->vexnum;i++)
{min=MAX;
for(w=0;w<G->vexnum;w++)
if(!final[w])
if(D[w]<min){v=w;min=D[w];}
final[v]=1;
for(w=0;w<G->vexnum;w++)
if(!final[w]&&(min+G->arc[v][w]<D[w]))
{D[w]=min+G->arc[v][w];
for(x=0;x<G->vexnum;x++);
p[w][x]=p[v][x];
p[w][w]=1;}
}
printf("最短路径为:");
for( j=0;j<G->vexnum;j++)
{if(p[v1][j]==1)
printf("G->vex[j].name");
}}
void DeleteVex(MGraph *G)
{
int row,col;
int v0;
printf("请输入要删除的顶点:\n");
scanf("%d",&v0);
for(int i=v0;i<G->vexnum;i++)
G->vex[i]=G->vex[i+1];
G->vexnum--;
for(row=0;row<G->vexnum;row++)
{
for(col=v0;col<G->vexnum;col++)
G->arc[row][col]=G->arc[row][col+1];
for(col=0;col<G->vexnum;col++)
G->arc[col][row]=G->arc[col][row+1];
}}
void DeleteArc(MGraph*G)
{
int v0,v1;
printf("请输入两顶点:\n");
scanf("%d,%d",&v0,&v1);
G->arc[v0][v1]=MAX;
G->arc[v1][v0]=MAX;
}
void InsertArc(MGraph *G)
{ int v0,v1,l=0;
printf("请输入两顶点:\n");
scanf("%d,%d",&v0,&v1);
printf("请输入路径长度:\n");
scanf("%d",&l);
G->arc[v0][v1]=1;
G->arc[v1][v0]=1;
}
void main()
{int a;
MGraph b;
InitGraph(&b);
scanf("%d",&a);
while(a!=7)
{switch(a)
{case 0:PutOutVex(&b);Menu();break;
case 1:PutOutArc(&b);Menu();break;
case 2:change(&b);Menu();break;
case 3:Dijkstra(&b);Menu();break;
case 4:DeleteVex(&b);Menu();break;
case 5:DeleteArc(&b);Menu();break;
case 6:InsertArc(&b);Menu();break;
case 7:exit(1);break;
default:break;}
scanf("%d",&a);
}
}