void ShowSchool() //显示校园全景图 {
printf(\┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓\\n\
printf(\┃ xxxxxxxx大学校园平面图 ┃\\n\
printf(\┣━━━━━━━━━━━━━━━━━━━━━━━━━━┫\\n\
printf(\┃┏━━━━━ ━━━━━┓ ┃\\n\
printf(\┃┃ ┃ 10.┃ ┃ \\n\
printf(\┃┃ 宿舍楼2 ┃━━━━━ ┃ 宿舍楼1 ┃ \\n\
printf(\┃┗━━━┳━┛ 15┃ ┣━━━━━┫ \\n\
printf(\┃ 11. ┃180 ┃ 10┃ 70┃ \\n\
printf(\┃ ┏┻┓ 150 ┏━━┻━━━━┓┃ ┏┻┓┃\\n\
printf(\┃ ┃体┣━━━┫ 旭日苑 ┣╝ ┃美┃┃\\n\
printf(\┃ 8.┃育┃ 9.┗━━┳━━━━┛ 7.┃食┃┃\\n\
printf(\┃ ┃馆┃ ┃ ┃广┃┃\\n\
printf(\┃ ┗┳┛ ┃ 200 ┃场┃┃\\n\
printf(\┃ ┃ ┃ ┗┳┛┃\\n\
printf(\┃ ┃60 6. ┃ ┃ \\n\
printf(\┃ ┃━━┳━━━━┻━┓ 130┃ \\n\
printf(\┃ ┃ 图书馆 ┣ ╬━━━╝ \\n\
printf(\┃ 80 ┗━━┳━━━┛ 4.┏━┻━━━┓ \\n\
printf(\┃ ┣━━┓━━╝ ┃ ┃ \\n\
printf(\┃ 5. ┃大活┃ ┏┻ ┳┛ \\n\
printf(\┃ ┃学动┃ ┃ 实验楼 ┃ \\n\
printf(\┃ ┃生中┃ ┏┻ ┳┛ \\n\
┃┃┃┃┃┃┃┃┃┃┃┃ printf(\┃ ┃ 心┃ ┃ ┃ ┃\\n\
printf(\┃ ┗┳━┛ 20 ┗━┳━━━┛ ┃\\n\
printf(\┃ ┃100 2.┏━━━┻━┓ ┃\\n\
printf(\┃ ┃ ┃ 教学楼 ┃ ┃\\n\
printf(\┃ ┏━━┻┓ 40 50 ┗━━┳━━┛┏━━━┓┃\\n\
printf(\┃ 3.┃行政楼┣━━━━━━━━━━╝ ┃ 南 ┃┃\\n\
printf(\┃ ┗━━━┛ ┃ ┃东╋西┃┃\\n\
printf(\┃ ┏━┻━━━┓ ┃ 北 ┃┃\\n\
printf(\┃ 1.┃ 北门 ┃ ┗━━━┛┃\\n\
printf(\┗━━━━━━━━┻━━━━━┻━━━━━━━━━━━┛\\n\ }
void ShowRoute(AdjMatrix *G) //显示图的所有路线 {
int i,j;
printf(\校园里一共有%d条路线.\\n\\n\ for(i=1;i<=G->vexnum;i++) for(j=1;j<=i;j++)
if(G->arcs[i][j]!=INFINITY) printf(\\\t距离为:%dm\\n\}
void ShowVex(AdjMatrix *G) //显示所有景点 {
int i;
printf(\校园共有%d个景点,编号、名称及介绍如下:\\n\\n\ for(i=1;i<=G->vexnum;i++)
printf(\}
void Serach(AdjMatrix *G) //查询景点 {
int i,n;
char name[20];
printf(\请选择你要查询的方式:\\n\
printf(\编号 2.名称\\n\ scanf(\
if(n == 1) {
printf(\请输入景点的编号(1~~%d):\ scanf(\ if(VexExit(G,n)) {
printf(\该景点情况及周围景点如下:\\n\
printf(\ %s\\n\\n\ for(i=1;i<=G->vexnum;i++) //找出与该景点相关的路线 if(G->arcs[n][i] != INFINITY)
printf(\ } }
else if(n == 2) {
printf(\该校园有以下景点,请选择:\\n\ for(i=1;i<=G->vexnum;i++)
printf(\
printf(\请输入要查询景点的名称:\ scanf(\
n=Locate(G,name); //通过名称找到该景点的序号 if(VexExit(G,n)) {
printf(\该景点名称、介绍及可以直达的景点如下:\\n\
printf(\ %s\\n\\n\ for(i=1;i<=G->vexnum;i++)
if(G->arcs[n][i]!=INFINITY)
printf(\ if(i>G->vexnum+1)
printf(\此景点为独立的点,返回!\\n\ } } else
printf(\输入错误,返回!\\n\}
void AddRoute(AdjMatrix *G) //增加新路线 {
char name[20];
int start,ending,distance;
ShowRoute(G);
printf(\请输入要增加路线的起点和终点名称:\\n\
printf(\起点:\ scanf(\ start=Locate(G,name); printf(\终点:\ scanf(\
ending=Locate(G,name); printf(\距离:\
scanf(\
//将新路线的距离存入权值数组中 G->arcs[start][ending]=distance; G->arcs[ending][start]=distance;
G->arcnum++; //图的边集加1 printf(\添加新路线成功。\\n\}
void DeleteRoute(AdjMatrix *G) //删除路线 {
char name[20]; int start,ending;
ShowRoute(G);
printf(\请输入要删除路线的起点和终点名称:\\n\ printf(\起点: \ scanf(\ start=Locate(G,name); printf(\终点: \ scanf(\
ending=Locate(G,name);
if(G->arcs[start][ending] == INFINITY)
printf(\您要删除的路线不存在,请重新输入!\\n\ //将对应权值数组中的元素赋值,删除路线 else {
G->arcs[start][ending]=INFINITY ; G->arcs[ending][start]=INFINITY ; G->arcnum--;
printf(\删除路线成功。\\n\ } }
void AddVex(AdjMatrix *G) //增加景点 {
int i;
char name[20]; char intro[100];
printf(\该校园包含以下景点:\\n\ for(i=1;i<=G->vexnum;i++)
printf(\ printf(\请输入增加景点的名称和介绍:\\n\ scanf(\
//图的顶点集先加1,将增加景点的信息赋值到图的末尾景点中 G->vexnum++;
G->vex[G->vexnum].num=G->vexnum; strcpy(G->vex[G->vexnum].name,name); strcpy(G->vex[G->vexnum].introduce,intro); //对新增景点的权值数组元素赋初值 for(i=1;i<=G->vexnum;i++)
G->arcs[G->vexnum][i]=INFINITY; for(i=1;i<=G->vexnum;i++)
G->arcs[i][G->vexnum]=INFINITY; printf(\增加景点成功!\\n\}
void DeleteVex(AdjMatrix *G) //删除景点 {
int i,j,count=0; char name[20];
printf(\该校园有以下景点:\\n\ for(i=1;i<=G->vexnum;i++)
printf(\ printf(\请输入删除景点的名称:\\n\ scanf(\ i=Locate(G,name); if(VexExit(G,i)) {
for(j=1;j<=G->vexnum;j++) //找出与该景点相关的路线数目 if(G->arcs[i][j]!=INFINITY) count++;
//先找到景点在图中的位置,从后往前依次覆盖原值 for(i;i<=G->vexnum;i++) {
G->vex[i].num=G->vex[i+1].num;
strcpy(G->vex[i].name,G->vex[i+1].name);
strcpy(G->vex[i].introduce,G->vex[i+1].introduce); }
G->vexnum--; //图的顶点集减1
G->arcnum=G->arcnum-count; //图的边数目减去与删除景点有关的路线数目
printf(\删除景点成功!\\n\ } }
void Dijkstra(AdjMatrix *G,int start,int ending,int dist[],int path[][MAXVEX]) //求起点到终点的最短路线