#define INFINITY 10000
#define MAX_VERTEX_NUM 40 #define MAX 40 #include #include typedef struct ArCell { int adj; /* 路径长度 */ } ArCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct /* 图中顶点表示主要景点 , 存放景点的编号、名称、简介等信息, */ { char name[30]; int num; char introduction[100]; /* 简介 */ } infotype; typedef struct { infotype vexs[MAX_VERTEX_NUM]; AdjMatrix arcs; int vexnum,arcnum; } MGraph; MGraph b; void cmd( void ); MGraph InitGraph( void ); void show1(); void list(); void Menu(void ); void ShortestPath_DIJ(MGraph void Search(MGraph * G); int LocateVex(MGraph * G,char * v); /********** 主函数 ************************/ * G); void main( void ) { system( \"color 5f\" ); /* 修改控制台的颜色信息 , 改为白字蓝底的模式 */ ); /* 设置批处理运行时窗口大小的 system( \"mode con: cols=140 lines=130\" */ cmd(); } /******** 自定义函数 ***************/ /* cmd 函数 ( 根据目录选择要进行的项目 )*/ void cmd( void ) { char k; b=InitGraph(); show1(); Menu(); while (1) { scanf( \"\\n%c\" , &k); switch (k) { case 'x' : system( \"cls\" ); show1(); Menu(); list(); ShortestPath_DIJ( &b); printf( \"--------------------------------- --------------------------------\\n\" printf( \"\\n 请您继续选择服务 :\" ); break ; case'y' : system( \"cls\" ); Menu(); list(); Search( &b); printf( \"--------------------------------- --------------------------------\\n\" printf( \"\\n 请您继续选择服务 :\" ); break ; ); ); 欢迎您的使用 欢迎您的使用 case 'z' : system( \"cls\" ); printf( \\n\" ); \" ┏━━━━━━━━━━━━━━━━━━━━┓ printf( \\n\" ); \" ┃ 感谢使用 ┃ printf( \\n\" ); \" ┃ 安徽建筑术大学 ┃ printf( \\n\" ); \" ┃ 智能导航系统 ┃ printf( \\n\" ); \" ┗━━━━━━━━━━━━━━━━━━━━┛ exit(0); default : printf( \" 输入信息错误! \\n 请输入 x或 y或 z.\\n\" ); break ; } } } /* 迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径 ,v0 为起点 */ void ShortestPath_DIJ(MGraph { int v,w,i,min,t * G) =0,x,flag =1,v0,v1,have[100],k; int final[20], D[20], p[23][23]; while (flag) { printf( \" 请输入起始景点编号 :\\n\" ); scanf( \"%d\ if (v0 <0|| v0>G-> vexnum) printf( \" 景点编号不存在 !\" ); printf( \" 请输入终止景点编号 :\\n\" ); scanf( \"%d\ if (v1 <0|| v1>G-> vexnum) printf( \" 景点编号不存在 !\" );if (v0 >=0&&v0 for (v =0;v final[v] =0; D[v] =G-> arcs[v0][v] . adj; for (w=0;w p[v][w] =INFINITY; if (D[v] } } D[v0] =0; final[v0] =1; have[0] =v0; for (i =1;i min=INFINITY; for (w=0;w if ( ! final[w]) if (D[w] min=D[w]; } final[v] =1; have[k] =v; k++; for (w=0;w if ( ! final[w] &&((min +(G-> arcs[v][w] { D[w]=min+G-> arcs[v][w] . adj; for (x =0;x p[w][x] =p[v][x]; p[w][w] =1; } . adj)) for (i =0;i if (p[v1][have[i]] ==1) { printf( \"-->%s\" ,G-> vexs[have[i]] . name);} } if ((v1 - v0) ==1)printf( \"\\n 路径长度 :%d\\n\" ,G-> arcs[v0][v1]); else printf( \"\\n 路径长度 :%d\\n\" ,D[v1]); } //ShortestPath_DIJ end /* 查找函数的建立 */ void Search(MGraph * G) { int k,flag =1; while (flag) { printf( \" 请输入要查询的景点编号 :\" ); scanf( \"%d\ if (k <0|| k>G-> vexnum) { printf( \" 景点编号不存在 ! 请重新输入景点编号 :\" ); scanf( \"%d\ } if (k >=0&&k flag =0; } printf( \" ┏━━┳━━━━━━━━┳━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━┓ \\n\" ); printf( \" ┃编号 ┃景点名称 ┃ 简介 ┃ \\n\" ); printf( \" ┃%-4d┃%-16s┃%-58s┃ \\n\" ,G-> vexs[k] . num,G-> vexs[k] . name,G-> vexs[k] . introduction); printf( \" ┗━━┻━━━━━━━━┻━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━┛ \\n\" ); } //Search end void show1() { printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( printf( \"\\ \"\\\ \"\ \"\ \"\ \"\ \"\ \"\ \"\ \"\ \"\ \"\ \"\ ★★ 欢迎使用安徽建筑大学智能导航系统 安徽建筑大学南校区简略版平面图 ★★ \\n\" ); \\n\\n\" ); 学校北门 \\n\" ); ┃ \\n\" ); ┏━━ 北食堂 ━━━━━━━━━ 宿舍楼 1\\n\" ); ┃ ┃ ┃ ━━━━━━九月桥━━━━━ ┃ 主教楼 ┃ 日月广场 ┃ ┃ \\n\" ); 宿舍楼 2\\n\" ); ┃ \\n\" ); ┃ \\n\" ); ┃ \\n\" ); ┃ \\n\" ); ┃ \\n\" ); ┃ \\n\" ); printf( printf( printf( printf( printf( \"\ \"\ \"\ \"\ \"\ 图书馆 ┃ 还在建 ┃ ┃ \\n\" ); ┃ \\n\" ); ┃ \\n\" ); ┃ \\n\" ); 南食堂 ━━━━━━━━━━━━ 宿舍楼 15\\n\" ); printf( \"\ printf( \"\ printf( \"\ \\n\" ); } void list() { printf( \" 学校景点列表 :\\n\" printf( \"0: 学校北门 \" ); printf( \"1: 宿舍楼1\" ); printf( \"2: 宿舍楼2\" ); printf( \"3: 宿舍楼 15 \" ); printf( \"4: 九月桥 \\n\" ); printf( \"5: 主教楼 \" ); printf( \"6: 图书馆 \" ); printf( \"7: 日月广场 \" ); printf( \"8: 体育场 \\n\" ); printf( \"9: 还在建 \" ); printf( \"10: 南食堂 \" ); ┃ ┃ \\n\"┃ ┃ \\n\"━━━━━━━━━━━━━━南苑超市 ); ); ); } /* 目录函数的构建 */ void Menu() { printf( \"\\n 安徽建筑大学南校区导游图 \\n\" ); printf( \" ┏━━━━━━━━━━━━━━━━━━━━┓ \\n\" ); printf( \" ┃ x. 选择出发点和目的地 ┃\\n\" ); printf( \" ┃ y. 查看景点信息 ┃\\n\" ); printf( \" ┃ z. 退出系统 ┃\\n\" ); printf( \" ┗━━━━━━━━━━━━━━━━━━━━┛ \\n\" ); printf( \" 请选择服务 \" ); } /*MGraph函数(图的构建) */ MGraph InitGraph( void ) { MGraph G; int i,j; G. vexnum=17; // 顶点是 17个 G. arcnum=25; // 弧线有 25个 for (i =0;i strcpy(G . vexs[0] . introduction, \" 学校的正门,气势宏伟 \" ); strcpy(G . vexs[1] . name,\" 宿舍楼 1\" ); strcpy(G . vexs[1] . introduction, \" 睡觉的地方 \" ); strcpy(G . vexs[2] . name,\" 宿舍楼 2\" ); strcpy(G . vexs[2] . introduction, \" 睡觉的地方 \" ); strcpy(G . vexs[3] . name,\" 宿舍楼 15\" ); strcpy(G . vexs[3] . introduction, \" ,,,,,,,, \" ); strcpy(G . vexs[4] . name,\" 九月桥 \" ); strcpy(G . vexs[4] . introduction, \" 连接生活区和教学区的桥。 \" );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, \" 有漂亮喷泉的广场 \" ); strcpy(G . vexs[8] . name,\" 体育场 \" ); strcpy(G . vexs[8] . introduction, \" 运动健身的地方 \" ); strcpy(G . vexs[9] . name,\" 还在建 \" ); strcpy(G . vexs[9] . introduction, \" 学校新修的实验楼,灰常高大上strcpy(G . vexs[10] . name,\" 南食堂 \" ); strcpy(G . vexs[10] . introduction, \" 不好吃 \" ); for (i =0;i . adj =50; \" ); G. arcs[1][2] . adj =15; G. arcs[1][3] . adj =40; G. arcs[2][3] . adj =30; G. arcs[0][3] . adj =90; G. arcs[3][4] . adj =30; G. arcs[4][9] . adj =1000; G. arcs[4][5] . adj =20; G. arcs[5][6] . adj =10; G. arcs[6][7] . adj =8; G. arcs[6][8] . adj =12; G. arcs[7][8] . adj =7; G. arcs[0][9] . adj =30; G. arcs[9][10] . adj =500; G. arcs[10][11] . adj =25; G. arcs[11][12] . adj =8; G. arcs[12][13] . adj =5; G. arcs[13][14] . adj =10; G. arcs[12][14] . adj =10; G. arcs[14][15] . adj =150;G. arcs[15][16] . adj =3; G. arcs[5][15] . adj =150; G. arcs[4][15] . adj =30; G. arcs[1][11] . adj =300; G. arcs[8][14] . adj =40; for (i =0;i . adj =G. arcs[i][j] . adj; 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务