1、void Simpleway(MGraph& m,char *str,char *buf)/求任意两个景点之间的所有简单路径int Minway(MGraph& m,char *str,char *buf)/求两顶点间的最短路径3. 各模块之间的调用关系以及算法设计函数CreateDN调用函数LocateVex函数Simpleway调用函数LocateVex函数Minway调用函数LocateVex, GetVex,FirstAdjVex,NextAdjVex主函数调用函数CreateDN,Simpleway,Minway。三、详细设计1.数据类型定义typedef struct VRType
2、 adj; int info; ArcCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM; VertexType vexsMAX_VERTEX_NUM; AdjMatrix arcs; int vexnum,arcnum;MGraph;2.系统主要子程序详细设计a.void CreateDN(MGraph *G) /* 采用数组(邻接矩阵)表示法,构造有向网G */ int i,j,k,w,c; char sMAX_INFO,*info; VertexType va,vb; printf(请输入景点个数以及景点间所有路径的个数(以空格隔开); scanf(%d
3、 %d,&(*G).vexnum,&(*G).arcnum);请输入%d个景点:n,(*G).vexnum); for(i=0;i(*G).vexnum;+i) /* 构造顶点向量 */ scanf(%s,(*G).vexsi);+i) /* 初始化邻接矩阵 */ for(j=0;j+j) (*G).arcsij.adj=INFINITY; /* 网 */ (*G).arcsij.info=NULL; 请输入%d条景点间的路径,路径间的路程权值以及路径间到达方式(以0或1来表示到达方式,步行:0,索道:1,如:光明顶 迎客松 30 1): n,(*G).arcnum); for(k=0;k(*
4、G).arcnum;+k) %s%s%d%d*c,va,vb,&w,&c);/* %*c吃掉回车符 */ i=LocateVex(*G,va); j=LocateVex(*G,vb); (*G).arcsij.adj=(*G).arcsji.adj=w; /* 有向网 */ (*G).arcsij.info=(*G).arcsji.info=c; /* 有向 */ b. m,char *str,char *buf)/*求任意两个景点之间的所有简单路径*/for(int i=0;m.vexnum;i+)visitedi=false;int x=LocateVex(m,str);int y=Loc
5、ateVex(m,buf);/*从x出发到y*/stacks;s.push(x);visitedx=true;int i=0;int z=0;/表示没有找到这两个点之间有路径while(!s.empty()int flag=0;/取栈顶元素 int t=s.top();for(;if(m.arcsti.adj != INFINITY & visitedi=false)s.push(i);flag=1; visitedi=true;/*找到简单路径*/ if(s.top()=y)/到达终点 z=1;/找到这样的路径 cout一条简单路径为:endl;stacks2;/建立一个临时的栈/创建一个数
6、组存放路径下标int *way=new ints.size();int count=0;while(!s2.push(s.top();s.pop();/还原s同时输出路径s2.empty()coutm.vexss2.top() ;waycount+=s2.top();s.push(s2.top();s2.pop();/计算路径长度,给出到达的方式int num=0; 到达方式:for(int k=0;s.size()-1;k+)int x1=LocateVex(m,m.vexswayk);int y1=LocateVex(m,m.vexswayk+1);num+=m.arcsx1y1.adj;
7、if(m.arcsx1y1.info=0)cout步行 else索道路程:numcout /出栈 int p=s.top(); visitedp=false; s.pop(); /从p开始接着访问后面的邻接点 i=p+1;break; /跳出本次循环i=0;break;if(flag=0)/出栈int p=s.top();visitedp=false;s.pop();/从p开始接着访问后面的邻接点i=p+1;if(z=0)cout两景点不可达c./分配路径相关信息的存储空间int *road=new int*m.vexnum;roadi=new intm.vexnum;/初始化for(int
8、j=0;j+)if(j=0)roadij=x;elseroadij=-1; /while(find_sx=true) find_si=false; lengthi=m.arcsxi.adj; if(m.arcsxi.adj!=INFINITY) roadi1=i; find_sx=true;lengthx=0;rigth_lengthx=0;for(int j=1;int pose=find_min_length(m,length);int z=0;/记录找到它的路径while(roadposez!=-1&z=m.vexnum)z+;/coutmin_length=lengthposerigth_lengthpose=lengthpose; /将路径最短的关联的另一个顶点加入已找到路径的数组中 fi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1