strcpy(G.vexs[16].name,"大门");
strcpy(G.vexs[16].introduction,"我们学校的大门,车辆进出的地方。设有保安。");
G.vexs[1].x=1;G.vexs[1].y=3;
G.vexs[2].x=2;G.vexs[2].y=3;
G.vexs[3].x=1;G.vexs[3].y=2;
G.vexs[4].x=2;G.vexs[4].y=2;
G.vexs[5].x=2;G.vexs[5].y=1;
G.vexs[6].x=3;G.vexs[6].y=1;
G.vexs[7].x=3;G.vexs[7].y=2;
G.vexs[8].x=3;G.vexs[8].y=3;
G.vexs[9].x=3;G.vexs[9].y=4;
G.vexs[10].x=4;G.vexs[10].y=1;
G.vexs[11].x=5;G.vexs[11].y=1;
G.vexs[12].x=5;G.vexs[12].y=4;
G.vexs[13].x=6;G.vexs[13].y=1;
G.vexs[14].x=6;G.vexs[14].y=3;
G.vexs[15].x=5;G.vexs[15].y=3;
for(i=0;i
}//InitGraph end
迪杰斯特拉算法求一点到任意其他景点的最短路径:
void dij(MGraph * G)
{
int v,w,w1,i,j,min,t=0,x,flag=1,v0;
int final[20], D[20], p[20][20];
while(flag)
{
printf("请您输入一个起始景点编号,按回车键结束:");
scanf("%d",&v0);
if(v0<0||v0>G->vexnum)
{
printf("景点编号不存在!请重新输入景点编号,按回车键结束:");
scanf("%d",&v0);
}
if(v0>=0&&v0vexnum)
flag=0;
}
for(v=1;vvexnum;v++)
{
final[v]=0;
D[v]=G->arcs[v0][v].adj;
for(w=1;wvexnum;w++)
p[v][w]=0;
if(D[v]vexnum;i++)
{
min=INFINITY;
for(w=1;wvexnum;w++)
if(!final[w])
if(D[w]vexnum;w++)
if(!final[w]&&(min+G->arcs[v][w].adjarcs[v][w].adj;
for(x=0;xvexnum;x++)
p[w][x]=p[v][x];
p[w][w]=1;
}
}
for(v=1;vvexnum;v++)
{
if(v!=v0)
{
printf("%s",G->vexs[v0].name);
w1=v0;
}
else continue;
do
{
flag=0;min=INFINITY;
for(w=1;wvexnum;w++)
{
if(p[v][w]&&w!=v0)
{
flag=1;
if(D[w]vexs[w1].xvexs[j].x)
printf("向东走%dm",G->arcs[w1][j].adj);
if(G->vexs[w1].x>G->vexs[j].x)
printf("向西走%dm",G->arcs[w1][j].adj);
if(G->vexs[w1].yvexs[j].y)
printf("向北走%dm",G->arcs[w1][j].adj);
if(G->vexs[w1].y>G->vexs[j].y)
printf("向南走%dm",G->arcs[w1][j].adj);
printf("-->%s",G->vexs[j].name);
w1=j;
p[v][j]=0;
}
else break;
}while(1);
printf("\n
总路线长%dm\n\n",D[v]);
}
printf("完毕,按任意键继续!\n");
getch();
}