} //双VOID函数结束。。。。。。。说明双void也是起框架作用的函数
MGraph InitGraph(void) {
MGraph G; int i,j;
G.vexnum=10; G.arcnum=14;
for(i=0;i G.vexs[i].num=i;//vexs[MAX_VERTEX_NUM]上面这样定义的 strcpy(G.vexs[0].name,\综合食堂\ strcpy(G.vexs[0].introduction,\新建标准化食堂\ strcpy(G.vexs[1].name,\东西办公楼\ strcpy(G.vexs[1].introduction,\全体教师办公场所,楼高12层,各种设施齐全\ strcpy(G.vexs[2].name,\号学生宿舍楼\ strcpy(G.vexs[2].introduction,\数理系男生宿舍楼,苏式建筑\ strcpy(G.vexs[3].name,\医院\ strcpy(G.vexs[3].introduction,\校医院,设施不是很齐全,只能看小病,收费较贵\ strcpy(G.vexs[4].name,\图书馆\ strcpy(G.vexs[4].introduction,\藏书60万册,设施良好,2楼为电子阅览室,环境幽雅\ strcpy(G.vexs[5].name,\足球场\ strcpy(G.vexs[5].introduction,\现代化塑胶跑道,人造草坪,适宜锻炼身体的场所\ strcpy(G.vexs[6].name,\沁园\ strcpy(G.vexs[6].introduction,\绿树成荫,适宜休息和读书\ strcpy(G.vexs[7].name,\主教学楼\ strcpy(G.vexs[7].introduction,\学院最大的教学楼,共5层,环形建筑,适宜学习\ strcpy(G.vexs[8].name,\西教学楼\ strcpy(G.vexs[8].introduction,\学院第二大教学楼,环境较差\ strcpy(G.vexs[9].name,\多媒体楼\ strcpy(G.vexs[9].introduction,\多媒体教学场所,设施先进,环境良好\ for(i=0;i G.arcs[i][j].adj=INFINITY; G.arcs[0][1].adj=100; G.arcs[0][2].adj=150; G.arcs[0][3].adj=195; G.arcs[1][6].adj=210; G.arcs[1][3].adj=100; G.arcs[1][2].adj=180; G.arcs[2][3].adj=150; G.arcs[2][5].adj=350; G.arcs[3][4].adj=100; G.arcs[3][6].adj=110; G.arcs[4][6].adj=20; G.arcs[4][5].adj=100; G.arcs[4][9].adj=80; G.arcs[4][8].adj=130; G.arcs[5][9].adj=150; G.arcs[5][8].adj=200; G.arcs[6][8].adj=80; G.arcs[6][7].adj=80; G.arcs[6][9].adj=70; G.arcs[7][8].adj=80; G.arcs[7][9].adj=90; G.arcs[8][9].adj=150; for(i=0;i G.arcs[j][i].adj=G.arcs[i][j].adj; return G; }//InitGraph end void Menu() { printf(\石家庄铁道学院导游图\\n\ printf(\┏━━━━━━━━━━━━━━━━━━━━┓\\n\ printf(\ ┃ 1.浏览校园全景 ┃\\n\ printf(\ ┃ 2.查看所有游览路线 ┃\\n\ printf(\┃ 3.选择出发点和目的地 ┃\\n\ printf(\ ┃ 4.查看景点信息 ┃\\n\ printf(\ ┃ 5.退出系统 ┃\\n\ printf(\┗━━━━━━━━━━━━━━━━━━━━┛\\n\ printf(\ } void Browser(MGraph *G) { int v; printf(\┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\\n\ printf(\┃编号┃景点名称 ┃简介 ┃\\n\ for(v=0;v printf(\┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\\n\ printf(\┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ \\n\printf(\┃ ┃ \\n\printf(\┃ ┏━━━━┓ ┏━━━━━━━━━━━━━┓ ┃ \\n\ printf(\┃ ┃5 足球场┣━━━━━┓ ┃┏━━━━━━━━┓ ┃ ┃ \\n\ printf(\┃ ┗━━━━┛ ┣━━━━━━━━━━━━━━━━━╋┫2 七号学生宿舍楼┃ ┃ ┃ \\n\ printf(\┃ ┃ ┏━━━━┓ ┏━━━┓ ┃┗━━━━━━━━┛ ┃ ┃ \\n\printf(\┃ ┃ ┃4 图书馆┃ ┃3医 院 ┃┃ ┃ ┃ \\n\printf(\┃ ┃ ┗━━┳━┛ ┗━┳━┛┃ ┃ ┃ \\n\ printf(\┃ ┃ ┃ ┃ ┃ ┏━┻━━━┓ ┃ \\n\ printf(\┃ ┏━━━━━╋━━━━╋━━━━━━━━━┻━┳┻━━━━━━━━━┳━┫0综合食堂 ┃ ┃ \\n\ printf(\┃ ┏━━┻━━┓ ┃ ┏━┻━┓ ┃ ┏━━━━━━┓┃ ┗━━━━━┛ ┃ \\n\ printf(\┃ ┃9 多媒体楼┃ ┃ ┃6沁园 ┣━━━━━━━━━┻━━┫1 东西办公楼┣┫ ┃ \\n\ printf(\┃ ┗━━━━━┛ ┃ ┗━┳━┛ ┗━━━━━━┛┃ ┃ \\n\ printf(\┃ ┏━━━━━┓ ┣━━━━┻━━┓ ┃ ┃ \\n\ printf(\┃ ┃8西教学楼 ┃ ┃ ┏━━┻━━┓ ┃ ┃ \\n\ printf(\┃ ┗━━┳━━┛ ┃ ┃ 7 主教学 ┃ ┃ ┃ \\n\ printf(\┃ ┃ ┃ ┗━━┳━━┛ ┃ ┃ \\n\ printf(\┃ ┗━━━━━┻━━━━━━━┻━━━━━━━━━━━━━━━━━━━┛ ┃ \\n\ printf(\┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ \\n\} // 迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径,v0为起点 void ShortestPath_DIJ(MGraph * G) { int v,w,i,min,t=0,x,flag=1,v0; int final[20], D[20], p[20][20]; while(flag) //while保证输入的数值在确定范围内的 { printf(\请输入一个起始景点编号:\ scanf(\ if(v0<0||v0>G->vexnum) { printf(\景点编号不存在!请重新输入景点编号:\ scanf(\ } if(v0>=0&&v0 // int v,w,i,min,t=0,x,flag=1,v0; // int final[20], D[20], p[20][20]; for(v=0;v final[v]=0; //当结果是1时说明已经求得v0到v的最短路径 D[v]=G->arcs[v0][v].adj; for(w=0;w p[v][w]=0; //p[v][w]=1说明w是从v0到v当前求得最短路径上的顶点 if(D[v] p[v][v0]=1;p[v][v]=1; } } D[v0]=0;final[v0]=1; //初始化v0顶点集为s //开始主循环,每次求得v0到某一v顶点的最短路径,并加v到s for(i=1;i min=INFINITY; //当前所知离v0最近的距离 for(w=0;w if(!final[w]) //确保定点w是存在是所求的 if(D[w] for(w=0;w D[w]=min+G->arcs[v][w].adj;//实现累加过成 for(x=0;x for(v=0;v if(v0!=v) printf(\ for(w=0;w if(p[v][w]&&w!=v0) printf(\ t++; } if(t>G->vexnum-1&&v0!=v)printf(\总路线长%dm\\n\\n\ } }//ShortestPath_DIJ end