1源程序的展示:#include#include#define MVNum 100 //用于数组中#define Maxint 9999 /*将无穷大的数值设为9999*/ typedef char vertextype;/*建立无向图*/ typedef int adjmatrix; typedef struct { vertextype vexs[MVNum]; adjmatrix arcs[MVNum][MVNum]; }mgraph; mgraph *G[2]; //设置指针数组用以实现最短路径 void city_number() //输出景点代表序号以及景点内容{printf('*************************************************************************\n');printf('1、一号楼 2、三号公寓楼 3、沁园 4、旧饭堂 5、开水房 6、充话费营业厅 \n');printf('7、行政楼 8、五号楼 9、体育馆 10、七桥 \n');printf('*************************************************************************\n');printf('1、 信息工程学院系楼: 专业有 计算机科学与技术 物联网 信息管理\n');printf('2、信息工程学院女学生住宿楼: 计算机科学与技术 物联网 信息管理 \n');printf('*************************************************************************\n');printf('3、 沁园: 校园景点 有:柳树环绕的人工湖 假山瀑布 \n');printf('4、 旧饭堂: 学校的一个饭堂之一,分为两层 \n');printf('*************************************************************************\n');printf('5、 开水房: 打水的地方 ,一壶水0.15元 \n');printf('6、 充话费: 旧饭堂下面有一个,其他的在打水放旁边 \n');printf('*************************************************************************\n');printf('7、 行政楼: 学校的办公楼,是学校的管理枢纽 \n');printf('8、 五号路: 大多数的课都在这里上课,是学校最热闹的地方\n');printf('*************************************************************************\n');printf('9、 体育馆: 大家放松的地方,有篮球、羽毛球等场地 \n');printf('10、 七桥园: 这是一个以众所周知的题为主题的景点 \n');printf('\n************************************************************************n');}void Createmgraph(int a,int n,int e)/*建立无向邻接矩阵*/{int i,j,k;int w;for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(i==j)G[a]->arcs[i][j]=0;/*邻接矩阵对角线初始值设为0*/else G[a]->arcs[i][j]=Maxint;/*其他元素设为无穷大*/for(k=1;k<=e;k++)/*读入e条边数的信息*/{printf('\n输入图中各起点终点及其权值i,j,w:');/*读入无向边及其权值*/scanf('%d,%d,%d',&i,&j,&w);G[a]->arcs[i][j]=w;G[a]->arcs[j][i]=w;}}void Dijkstra(int a,int v0,int N)/*Dijkstra(迪杰斯特拉)算法的实现和打印*/{enum boolean S[MVNum];/*终点集合*/int dist[MVNum],path[MVNum];/*dist表示源点v0到图中其余顶点的最短长度,path表示其对应的路径*/int i,wmin,u,num=1,k;for(i=1;i<=N;i++)/*数组dist和集合S付初值*/{dist[i]=G[a]->arcs[v0][i];/*数组dist初值为邻接矩阵*/S[i]=0;/*集合S初值设为空集*/if(dist[i]arcs[u][i]arcs[u][i];path[i]=u;}num++;}while(num<=N);printf('\n\t输出带权无向图的单元最短路径为:\n\t');/*打印v0到其他顶点的最短路径*/for(i=1;i<=N;i++){if(S[i]==1){k=i;printf('\n\t顶点%d到%d之间的路径为:',v0,i);while(k!=v0){printf('%d<--',k);/*输出后继顶点*/k=path[k];/*继续寻找下一个后继顶点*/}printf('%d',k);/*输出终点*/printf(',最短路径长度为%d\n',dist[i]);/*输出最短路径*/}else printf('\n\t顶点%d到%d之间没有路径!',v0,i);}printf('\n\t求一个城市到所有城市的最短路径结束,谢谢!\n\n\t\t');}void main()/*旅游咨询系统*/{int n,e,v,u,i,x;int z=0;G[1]=(mgraph *)malloc(sizeof(mgraph));/*建立类型为mgraph的十字链表结构*/G[2]=(mgraph *)malloc(sizeof(mgraph));printf('****************欢迎使用旅游咨询系统****************\n'); printf('输入图中顶点个数和边数n,e:');scanf('%d,%d',&n,&e);city_number();for(i=1;i<=n;i++)/*输入顶点信息*/{printf('\n请输入图的所有顶点i=');scanf('%d',&x);G[1]->vexs[i]=x;/*将顶点信息输入一维数组中*/G[2]->vexs[i]=x;}printf('\n请输入距离矩阵的数值\n');Createmgraph(1,n,e);/*建立距离矩阵*/printf('\n无向图的存储结构建立完毕!\n');do{printf('\n\n\n************进行最短查询************\n');printf('=========================================\n');printf('1.求一个景点到所有景点的最短路径\n');printf('2.退出\n');printf('=========================================\n');printf('请输入选择:');scanf('%d',&z);/*输入选择的操作*/city_number();if(z==1){printf('\n求一个景点到其他景点的最短路径:\n');printf('求单源路径,输入源点v为:');/*输入源点v0*/scanf('%d',&v);Dijkstra(1,v,n);//计算最短距离(迪杰斯特拉)}else if(z==2) printf('\n结束查询!谢谢使用!!\n');else printf('输入错误!!\n');/*输入不为1-3则重新选择*/}while(z!=2);/*输入2则退出*/printf('谢谢您的使用,再见!!!!\n');}