20xx本科毕业设计校园导航系统内容摘要:

\n)。 printf(\n请输入你的选择: )。 scanf(%d, amp。 yourchoice)。 }//endwhile(1) }//mainwork 无向网操作主调模块设计 int changegraph(mgraph amp。 c) { int yourchoice。 printf(\n 请问是要 \n\n (1)再次建图 (2)删除结点 (3)删除边 \n)。 printf(\n (4)增加结点 (5)增加边 (6)更新信息 \n\n (7)返回 ? \n\n)。 scanf(%d,amp。 yourchoice)。 printf(\n\n)。 while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||y ourchoice==5||yourchoice==6 ||yourchoice==7||yourchoice==8)) { printf(输入选择不明确,请重输 \n)。 scanf(%d,amp。 yourchoice)。 } while(1) { switch(yourchoice) { case 1: creatgragh(c)。 break。 // 重建图,调用 (6) case 2: delvex(c)。 break。 // 删除顶点,调用(10) case 3: delarc(c)。 break。 // 删除边,调用 (11) case 4: envex(c)。 break。 // 增加顶点,调用 (9) case 5: enarc(c)。 break。 // 增加边,调用 (8) case 6: newgraph(c)。 break。 // 更新图的信息 case 7: return 1。 // 返回主菜单 } printf(\n 请问是要 \n\n (1)再次建图 (2)删除结点 (3)删除边 \n)。 printf(\n (4)增加结点 (5)增加边 (6)更新信息 \n\n (7)返回 ? \n\n)。 scanf(%d,amp。 yourchoice)。 printf(\n\n)。 while(!(yourchoice==1||yourchoice==2||yourchoice==3||yourchoice==4||yourchoice==5||yourchoice==6 ||yourchoice==7||yourchoice==8)) { printf(输入选择不明确,请重输 \n)。 scanf(%d,amp。 yourchoice)。 } }//endwhile(1) return 1。 }//changegraph 求两景点间的所有路径 int allpath(mgraph c) {// 求两景点间的所有路径 //算法中将路径起始点编号 m 存入 d[ 0]数组元素中,并将其顶点访问标志设置为 1,即 visited[m]=1 //然后调 path( ) 函数求由 m 出发到景点 n 的所有路径。 int k, i, j, m, n。 printf(\n\n请输入你要查询的两个景点编号 :\n\n)。 scanf(%d%d,amp。 i,amp。 j)。 printf(\n\n)。 m=locatevex(c,i)。 //调用 2, 确定该顶点是否存在。 若存在 , 返回该顶点编号 n=locatevex(c,j)。 d[0]=m。 //存储路径起点 m (int d[ ]数组是全局变量 ) for(k=0。 k。 k++) //全部顶点访问标志初值设为 0 (int visited[ ]数组是全局变量 ) visited[k]=0。 visited[m]=1。 //第 m 个顶 点访问标志设置为 1 path(c,m,n,0)。 //调用 3。 k=0,对应起点 d[0]= =m。 k为 d[ ]数组下标 return 1。 }//endallpath void path(mgraph c, int m,int n,int k) {// 自递归调用函数。 若顶点 s 是由 m出发到景点 n的路径上的顶点,则调用自身,求由 s出发的所 //有可能到达顶点 n 的路径。 找到一条 (递归出口 ),输出一条 (限制只输出景点个数 =8 的路径 )。 //d[ ]数组存储由 m 出发到景点 n 的路径上的顶点编号, visited[ ]数组用于存放顶点是否被访问的标志 int s, x=0, t=k+1。 // t 用于存放路径上下一个顶点对应的 d[ ]数组元素的下标 if (d[k]==n amp。 amp。 k8) //递归出口,找到一条路径。 若 d[k]是终点 n且景点个数 =8,则输出该路径 { f or (s=0。 sk。 s++) printf(%s,[d[s]].name)。 //输 出该路径。 s=0 时为起点 m printf(%s\n\n,[d[s]].name)。 //输出最后一个景点名 (即顶点 n的名字,此时 s==k) } else { s=0。 while(s) //从第 m个顶点,试探至所有顶点是否有路径 { if(([d[k]][s].adjInfinity) amp。 amp。 (visited[s]= =0)) //初态:顶点 m 到顶点 s 有边,且未被访问 { visited[s]=1。 d[k+1]=s。 //存储顶点编号 s 至 d[k+1]中 path(c,m,n,t)。 //求从下标为 t=k+1的第 d[t]==s个顶 点开始的路径 (递归调用 ), //同时打印出一条 m 至 n 的路径 visited[s]=0。 //将找到的路径上顶点的访问标志重新设置为 0,以用于 试探新的路径 } s++。 //试探从下一个顶点 s 开始是否有到终点的路径 }//endwhile }//endelse }//endpath 用迪杰斯特拉( Dijkstra)算法,求一个景点到其它景点间的最短路径并打印 void shortestpath_dij(mgraph c) { // 迪杰斯特拉算法,求从顶点 v0 到其余顶点的最短路经 p[ ]及其带权长度 d[v] (最短路经的距离 ) // p[ ][ ]数组用于存放两 顶点间是否有通路标志。 若 p[v][w]= =1,则 w是从 v0 到 v的最短路经上的顶点。 // final[ ]数组用于设置访问标志。 int v, w, i, mi。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。