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 3.函数的调用关系图。 main() cmd() InitGraph() menu() 选择x 选择y 、 图4.3-3函数的调用关系图 1、 ShortestPath_DIJ(&b) Search(&b) 4.4测试与分析 4.4.1测试 输入导航功能x 16 输入起始点和终点号0和16,输出正确的最短路径和路径长度;重新选择导航功能。 选择导航功能y,输入,出发点2,输出景点2的简介。 选择导航功能3,退出导航系统。 若要实现导航功能x时输入错误,输出时就无路经。重新输入起始点,结束点。 若要实现功能2时输入错误,就会提示不存在这个地方。 17 4.4.2分析 1.调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析; 在调试的过程中发现在导航功能2中缺少判断语句,使得输入错误顶点时,没有提示出现错误的运行结果,在进行导航功能2之前加一个判断语句就可以了。这次的程序设计主要是设计求最短路径的算法,这个算法比较复杂,我根据书上算法一步步地进行分析,并通过请教同学和上网查相关程序,花费了很长时间在使得这个算法能正常运行。 4.5 附录 #define INFINITY 10000 #define MAX_VERTEX_NUM 40 #define MAX 40 #include void list(); void Menu(void); void ShortestPath_DIJ(MGraph * G); void Search(MGraph *G); int LocateVex(MGraph *G,char* v); /**********主函数************************/ void main(void) { system(\); /*修改控制台的颜色信息,改为白字蓝底的模式*/ system(\); /*设置批处理运行时窗口大小的*/ cmd(); } /********自定义函数***************/ /* cmd函数(根据目录选择要进行的项目)*/ void cmd(void) { char k; b=InitGraph(); show1(); Menu(); while(1) { scanf(\,&k); switch(k) { case 'x': system(\); show1(); Menu(); list(); ShortestPath_DIJ(&b); printf(\欢迎您的使用--------------------------------\\n\); printf(\请您继续选择服务:\); break; case'y': system(\); Menu(); list(); Search(&b); printf(\欢迎您的使用--------------------------------\\n\); printf(\请您继续选择服务:\); break; 19