AddRoute 输入start,ending,distance 调用 Locate 在arcs[]中存入distance 结束 AddVex 输入name,introduce 调用 Locate 在arcs[]中初始化 vexnum++ 结束 DeleteRoute 输入start,ending,distance 调用 Locate 在arcs[]中赋初值 结束 DeleteVex 输入name,introduce 调用 Locate 从图中最后一个节点依次往前覆盖 vexnum++ 结束
DFS 用for查找起点的邻接点 若是终点,直接输出 输出stack数组存放的路径 标志该点被访问 存入stack数组 stack下标往后移 3.重点设计及编码。
(1)文件的保存与读取:
1.将图的顶点数和边数写入文件
2.将图的顶点名称和介绍写入文件,用for循环控制; 3.将图中路线的起点和终点以及距离写入文件; 4.文件的读取与保存原理一样。
编码:
void Savefile(AdjMatrix *G); 将图保存到文件中
void Readfile(AdjMatrix *G); 从指定文件中读取信息并存入图中
(2)深度遍历:
用递归的方法,从某个节点出发,访问此节点,然后依次从出发节点的各个未被访问的邻接点出发深度优先搜索遍历;将走过的路径存入数组中,找到终点时输出路径。该函数模块用于查找两点之间的所有路径以及最优路径,找最优路径时,定义一个数组及最小值,每次最小值更新,就将路径值数组赋值到最优路径数组中去。
编码:void DFS(AdjMatrix *G,int start,int ending,int stack[],int visited[]);
(3)最小生成树prim算法
从图中的某一顶点v0出发,选择与它关联的具有最小权值的边,将其顶点加入到生成树的顶点集合中,以后的每一步从在生成树中的一个顶点,而另一个顶点不在生成树顶点集合中的各条边中选择权值最小的边,再把它的顶点加入到生成树顶点集合中,直到所有顶点都加入到生成树集合中
编码: void Prim(AdjMatrix *G,int start); //采用Prim算法求得最短连通路线
(4) 最短路径Dijkstra算法
用带权的邻接矩阵存储该带权有向图,借助一个辅助的一维数组dist[ ]记录从源点到其余各顶点的最短距离值,二维数组path[ ][ ]记录某顶点是否加入到集合S中,如果path[i][0]=1,则表示顶点Vi加入到集合S中,并且path[i]所在的行最终记录了从源点到Vi的最短路径上的各个顶点,否则,path[i][0]=0,则表示顶点Vi还在集合V-S中。
编码:
void Dijkstra(AdjMatrix *G,int start,int ending,int dist[],int path[][MAXVEX]); //求起点到终点的最短路线
五.测试数据及运行结果
1. 正常测试数据(3组)及运行结果;
(1) 查询景点时输入正确景点编号
(2)校园所有景点的信息
(3)查询两点之间的最优路径
2.非正常测试数据(2组)及运行结果。
(1) 输入错误的景点编号
(2)输入不存在的景点