数据结构课程设计实验报告-无向图、哈密尔顿回路、最短路径.docVIP

  • 51
  • 0
  • 约 22页
  • 2017-08-11 发布于安徽
  • 举报

数据结构课程设计实验报告-无向图、哈密尔顿回路、最短路径.doc

《数据结构》实验报告 ◎实验目: 实验目的:实验内容:一、需求分析 (1)请输入顶点数和边数(输入格式为:顶点数,边数):11,17 (2) 请输入顶点信息(输入格式为:顶点号):0 1 2 3 4 5 6 7 8 9 10 (3) 请输入每条边对应的两个顶点号及其权值(输入格式为:顶点,顶点,权值:): 0,6,5 0,7,4 0,4,3 1,4,1 1,6,8 1,3,2 2,4,6 2,3,3 2,10,7 3,5,8 5,10,3 5,9,8 6,7,1 7,8,4 7,9,6 8,9,2 9,10,6 (4) 请选择操作: 1如果选择输入为1,结果为: 最短哈密尔顿回路为:0-6-7-8-9-5-10-2-3-1-4-0 权值为:5+1+4+2+8+3+7+3+2+1+3=39 2如果选择输入为2,结果为: 请输入指定起始点:0 请输入指定终点:6 请输入路径经过指定的顶点:10 输出路径是:0-4-2-10-9-7-6 起始点为0终点为6的经过指定点10的最短路径为:29 3如果选择输入为3,结果为: 请输入指定起始点:4 请输入指定终点:1 请输入路径经过指定的顶点一:8 请输入路径经过指定的顶点二:3 输出路径是:4-1-3-1-6-7-8-7-6-1 起始点为4终点为1的经过指定点一8以及指定点二3的最短路径为:31 4如果选择输入为0,结果为: 结束. 二 概要设计 ??void hamidun(mgraph g) 求解最短哈密尔顿回路 int lujing(mgraph g,int v0,int vn,int dist[],int prev[]) 求解指定两点之间的最短路径 void ShowPath(mgraph g,int v0,int u,int *dist,int *prev) 输出所求最短路径所经过的顶点 void zhiding1(mgraph g,int v0,int vn,int vx) 求解任意两点之间的最短路径,须经过指定1个顶点 void zhiding2(mgraph g,int v0,int vn,int vx1,int vx2) 求解任意两点之间的最短路径,须经过指定2个顶点 本程序包含六个模块: (1)主程序模块 (2)求解最短哈密尔顿回路模块 (3)求解指定两点之间的最短路径模块 (4)输出所求最短路径所经过的顶点模块 (5)求解任意两点之间的最短路径,须经过指定1个顶点模块 (6)求解任意两点之间的最短路径,须经过指定2个顶点模块 (7)模块调用图 三 详细设计 元素类型,结点类型和指针类型:#define M 50 //哈密顿回路最长值 #define MAX_LENGTH 1024 //单边最大值 #define MAX_SIDE_LENGTH 30 //节点信息结构 struct Node { int level; //位于生成树的第几层 int dot; //第几个节点 }; typedef struct { int edge[M][M]; int N,e; int vexs[M]; }mgraph; Node s[99]; //记忆最短路径 Node aShortNode[M]; //记忆当前路径 Node aNode[M]; Node node; 2.每个模块的分析: (1)主程序模块 int main() { int i,j,k,w,v0,vn,vx,vx1,vx2,m; mgraph g; printf(请输入顶点数和边数(输入格式为:顶点数,边数):\n); scanf(%d,%d,(g.N),(g.e)); getchar(); printf(请输入顶点信息(输入格式为:顶点号):\n); for(i=0;ig.N;i++) { scanf(%d,(g.vexs[i])); getchar(); } for(i=0;ig.N;i++) for(j=0;jg.N;j++) g.edge[i][j]=999; //认为999时两顶点之间无边 printf(请输入每条边对应的两个顶点号及其权值(输入格式为:顶点,顶点,权值:):\n); for(k=0;kg.e;k++) { scanf(%d,%d,%d,i,j,w); g.edge[i][j]=g.edge[j][i]=w; } while(1) { printf(******************************************************************\n); printf(\t1.求解最短哈密尔顿回路.\n); printf(\t2.求解任意两个

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档