一个校园导游系统帮我找找错

发布时间:2024-09-28 07:08 发布:上海旅游网

问题描述:

基本要求:
1、所含场所不少于10个,以图中顶点存放场所名称,以边表示路径
2、为房客提供任意场所相关信息查询
3、问路查询,查询任意两景点间的最短路径。
#include "stdio.h"
#define num 20
#define INFINITY 100
#define N 10
#define FALSE 0
#define TRUE 1
typedef char vertextype;
typedef int edgetype;
typedef int distanmatrix;
typedef char pathmatrix;
typedef struct
{ vertextype vexs[10];
edgetype edges[10][10];
int n,e;
}mgragh;
void createmgraph(mgragh *g)
{int i,j;
for(i=0;i<10;i++)

{ g->vexs[i]=i;
printf("%2d",g->vexs[i]);}printf("\n");

for(i=0;i<10;i++)
{for(j=0;j<10;j++)
g->edges[i][j]=0;
g->edges[0][1]=50;
g->edges[0][2]=30;
g->edges[0][4]=100;
g->edges[0][5]=85;
g->edges[0][6]=65;
g->edges[0][7]=60;
g->edges[0][8]=75;
g->edges[0][9]=20;
g->edges[1][2]=30;
g->edges[1][8]=60;
g->edges[2][3]=20;
g->edges[3][4]=60;
g->edges[4][5]=35;
g->edges[5][6]=60;
g->edges[2][9]=30;
}

for(i=0;i<10;i++)
for(j=0;j<10;j++)
{ g->edges[j][i]=g->edges[i][j];

}
}
void output(mgragh *g)
{int i,j;
for(i=0;i<10;i++)
{for(j=0;j<10;j++)

printf("%6d",g->edges[i][j]);

printf("\n\n");
}
}

void inquire()
{int i;
printf("please input a number from 0~9:\n");
scanf("%d",&i);
switch(i)
{
case 0:printf("playground,playing ball\n") ;break;
case 1:printf("office,where teacher work\n");break;
case 2:printf("classroom,small classroom\n");break;
case 3:printf("T-classroom,large classroom\n");break;
case 4:printf("restaurant and super maket,eat food and buy everthing\n");break;
case 5:printf("dormitony,where student stay\n") ;break;
case 6:printf("park,entertainment after class\n");break;
case 7:printf("meeting room\n");break;
case 8:printf("laboratory\n");break;
case 9:printf("libarry\n");break;
}
}
void shortest(mgragh *g,int v0,pathmatrix *p,distanmatrix *d)
{int i,v,w,min,final[10],pre;
for(v=0;v<10;v++)
{final[v]=FALSE;
d[v]=g->edges[v0][v];
p[v0]=-1;
if(d[v]<INFINITY&&v!=v0)p[v]=v0;
if(d[v]==INFINITY)p[v]=-2;
}
d[v0]=0;final[v0]=TRUE;
for(i=1;i<10;++i)
{min=INFINITY;
for(w=0;w<10;++w)
if(!final[w])
if(d[w]<min){v=w;min=d[w];}
final[v]=TRUE;
for(w=0;w<10;++w)
if(!final[w]&&(min+g->edges[v][w]<d[w]))
{d[w]=min+g->edges[v][w];
p[w]=v;
}
}
for(i=1;i<10;i++)
{if(p[i]==-2)printf("max%d\n",i);
else{printf("%d %d",d[i],i);
pre=p[i];
while(pre>0)
{printf("<-%d",pre);pre=p[pre];}
printf("\n");
}
}
}

main()
{pathmatrix *p;
distanmatrix *d;
int a[10][10],v0;
mgragh g;
inquire();
createmgraph(&g);
output(&g);
printf("please input a number from 0~9:\n");
scanf("%d",&v0);
shortest(&g,v0,p,d);
getch();
clrscr();
或者给出最短路径的算法

问题解答:

.................
.................

热点新闻