版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、最新资料推7.22试基于图的深度优先搜索策路写一算法, 判别以邻接表方式存储的有向图中是否存在由顶 点vi到顶点vj的路径(iHj)。注意:算法中涉及 的图的基本操作必须在此存储结构上实现。实现下列函数:Status DfsReachable(ALGraph g. int i, int j);/* Judge if it exists a path from vertex i to */* vertex 了 in digraph g.*/* Array visitedJ has been initialed to false.*/图的邻接表以及相关类型和辅助变量定义如下:Status visi
2、ted(MAX_VERTEX_NUM ;typedef char VertexType;typedef stnict ArcNode int adjvex;struct ArcNode *nextarc; ArcNode;typedef stnict VNode VertexType data;ArcNode *firstarc; VNode, AdjListMAX_VERTEX_NUM;typedef stnict Adj List vertices;int vexnum arcnum; ALGraph:Status DfsReachable(ALGraph g, int i, int j)
3、/* Judge if it exists a path from vertex 丫 to */* vertex 了 in digraph g*/* Array isitedf1 has been initialed to Talsc.*/int k;ArcNode *p;visitedi=I;for(p=g.verticesi.firstarc;p;p=p-nextarc)if(p)(k=p-adjvex;if(k=j)return 1;if(visitedk|!=l)if(DfsRcachable(g,kj)return 1;return 0:)7.23同7.22题要求。试基于图的广度优先
4、搜索策略写一算法。实现下列函数:Status BfsReachable(ALGraph g, int i, int j);/* Determine whether it exists path from vertex i to /* vertex j in digraph g with Breadth_First Search. */* Array Visited* has been initialed to false. */图的邻接表以及相关类型和辅助变量左义如下:Status visited(MAX_VERTEX_NUMJ;typcdef char VertexType;typcdef
5、stnict ArcNode int adjvex;struct ArcNode *nextarc;)ArcNode;typcdef stnict VNode VertexType data;ArcNode *firstarc;)VNode, AdjListIMAX_VERTEX_NUM|;typcdef stnict Adj List vertices;int vexnum arcnum; ALGraph:Status InitQueue(Queue &q);Status EnQueue(Queue &q. int e);Status DeQucue(Queue &q. int &c);St
6、atus QucueEmpty(Queue q);Status GetFront(Queue q, int &c);Status BfsReachable(ALGraph g, int i, int j)/* Determine whether it exists path from vertex i to */ vertex j in digraph g with Breadth_First Search. /* Array visited has been initialed to false*. */Queue q;int k.n;ArcNode *p;InitQueue(q);EnQu
7、eue(q.i);while( !QueueEmpty(q)DcQueue(q,k);visitedk=l;for(p=g.verticesk.firstarc;p;p=p-nextarc)(n=p-adjvex;if(n=j)return 1:if(visited(n!=l)EnQueue(qji);return 0;)7.24试利用栈的基本操作编写,按深度优先搜索策略 遍历一个强连通图的非递归形式的算法。算法中不规左具 体的存储结构,而将图Graph看成是一种抽象的数据类型。实现下列函数:void Traverse(Graph dig. VertexType vO. void(*visit
8、)(VertexTjpe);/* Travel the digraph dig with Depth_First Search. */图以及相关类型、函数和辅助变量左义如下:Status visitedMAX_VERTEX_NUMl;int LocateVcx(Graph g, VertexType v);VertexType GetVex(Graph g, int i):int FirstAdjVex(Graph g, int v);int NextAdjVex(Graph g, int v, int w);void visit(char v);Status InitStack(SStack
9、 &s);Status Push(SStack &s. SElemType x);Status Pop(SStack &s, SElemType &x);Status StackEmpty(SStack s);Status GetTop(SStack s, SElemType &c);void Traverse(Graph dig, VertexType vO, void (*visit)(VertexTpe)int i,v,flag;SStack s;VertexTypc p; InitStack(s);/flag来记录某点还有没有邻接点if(dig.vexnuni&dig.arcnum)
10、i=LocateVex(dig.vO);visitedi=TRUE;visit(vO);Push(SArO);while(! StackEmpty(s)GetTop(s,p);v=LocateVex(dig.p);flag=0;for(i=FirstAdjVex(dig,v);i=0;i=NextAdjVex(digAr,i) if(!visitedi) p=GetVex(digJ); flag=l; break;if(flag)visit(p);visitedi=TRUE;Push(s.p);elsePop(s,p); 7.27采用邻接表存储结构,编写一个判别无向图中任意给左的 两个顶点之间
11、是否存在一条长度为k的简单路径的算法。实现下列函数:Status SinglePath(ALGraph g, VertexType sv, VcricxTypc tv,int k. char *sp);/* Judge whether it exists a path from sv to tv with length k */* in graph g, return path using string sp if exists*/图的邻接表以及相关类型、函数和辅助变量左义如下:Status visitedMAX_VERTEX_NUMl;typcdcf char StrARR 100MAX_V
12、ERTEX_NUM+1;typcdcf char VertexType;typcdcf stnict ArcNode int adjvex;struct ArcNode *nextarc;)ArcNode;typedef stnict VNode VertexType data;ArcNode *firstarc; VNode, AdjListMAX_VERTEX_NUM;typedef stnict AdjList vertices;int vexnum arcnum; ALGraph:int LocateVex(Graph g, VertexType v);void inpath(char
13、 *&path、VertexType v);/* Add vertex V to path */void depath(char *&palh. VertexType v);/* Remove vertex V from path /Status SinglePath(ALGraph g, VertexType sv, VertexType tv, int k, char *sp)/* Judge whether it exists a path from sv to tv with length k */* in graph g, return path using string sp if
14、 exists.*/ intArcNode *p;if(sv=tv & k=0) inpath(sp,tv);return OK: elsei=LocateVex(g,sv);visitedi=l;inpath(sp.sv);for(p=g.verticesi.firstarc;p;p=p-nextarc)(l=p-adjvex;if(!visitedl)if(SinglePath(g,g.verticesl.dataJv,k-l,sp)return OK:elsedepath(sp.g.verticesl.data);)visitedi=O;7.28 已知有向图和图中两个顶点u和v,试编写算
15、法求 有向图中从u到v的所有简单路径。实现下列函数:void AllPath(ALGraph g、VertexType sv. VertexType tv,StrARR &path int &i);/* Get all the paths from vertex sv to tv, save them */* into Array path which contains string components */* Return the number of path using i*/图的邻接表以及相关类型、函数和辅助变量是义如下: Status visited(MAX_VERTEX_NUMJ;
16、typedef char StrARR100MAX_VERTEX_NUM+1 ; typcdef char VertexTvpe;typedef stmet ArcNode int adjvex;struct ArcNode *nextarc;)ArcNode;typedef stmet VNode VertexType data;ArcNode *firstarc; VNode, AdjListMAX_VERTEX_NUM;typedef stnict Adj List vertices;int vexnuni arcnum; ALGraph;int LocateVex(Graph g, V
17、ertexType v);void inpath(char *patlr VertexType v);/* Add vertex V to path */void depath(char *path, VertexType v);/* Remove vertex V from path */void AllPath2(ALGraph g, VertexTSpe sv, VertexType tv, StrARR &path, int &i,int &d,VertexType A) int j,k丄m.n;ArcNode *p;j=LocateVex(g,sv);visitedj=l;Ad+=s
18、v;if(sv=tv)m=0;for(n=0;nnextarc)l=p-adjvex;if(!visitedl)AllPath2(g,g.verticesl.data,tv;pathJ.d,A);visitedj=O;d_;void AllPath(ALGraph g, VertexTpe sv. VertexType tv,StrARR &palh. int &i)/* Get all the paths from vertex sv to tv, save them */* into Array path which contains string components */* Retur
19、n the number of path using i*/int d=O,jJ;VertexType AMAX_VERTEX_NUM.B|MAX_VERTEX_NUM;for(l=0;l5;l+)strcpy(B.pathl);for(j=0;jstrlen(pathl):j+)depath(pathl.Bj);AllPath2(g,sv,tv,path,i,d,A);7.31试完成求有向图的强连通分量的算法,并分析算法的时间复杂度。实现下列函数:void StronglyConnected(OLGraph dig, StrARR &scc, int &n);/* Get all the s
20、trongly connected components in the digraph dig, */* and put the ith into scci which is a string*/图的十字链表以及相关类型和辅助变量立义如下:Status visited(MAX.VERTEX.NUM ;int finishedMAX_VERTEX_NUM;typcdcf char StrARRMAX_VERTEX_NUMMAX_VERTEX_NUM+l; / 记录齐强连通分疑 typcdcf stmct ArcBox int tailvex,headvex;struct ArcBox *hlin
21、k?tlink; ArcBox;typcdcf stnict VexNode VertexType data;ArcBox *firstiiL*firstout; VexNode;typcdcf stnict VexNode xlist(MAX_VERTEX_NUM;int vexnuni, arcnum; OLGraph;int count;void DFSl(OLGraph digjnt v);void DFS2(OLGraph digjnt v.StrARR &sccjnt jjnt k);void StrongIyConnected(OLGraph dig, StrARR &scc,
22、int &n)/* Get all the strongly connected components in the digraph dig, */* and put the ith into scci which is a string*/int i,k=0,v;count=0;for(v=0;vdig.vexnum;v+)if(!visitedv)DFSl(dig.v);for(v=0;v=0:i-)v=finishedi;if(!visitedv)DFS2(dig,v,scc,n,k);n+;)void DFSKOLGraph digjnt v)int w;ArcBox *p;visit
23、edv=l;for(p=dig.xlistv.firstout;p;p=p-tlink) w=p-headvex;if(!visitedw)DFSl(dig,w);finishcdcount+=v;void DFS2(OLGraph digjnt v.StrARR &secant j,int k)int w;ArcBox *p;visitedv=l;sccjk+=dig.xlistv.data;for(p=dig.xlistv.firstin;p;p=p-hlink)w=p-tailvex;if(!visitedw)DFS2(dig,w,scc、j,k);7.29试写一个算法,在以邻接矩阵方式
24、存储的有向图G中求顶点i到顶点j的不含回路的、长度为k 的路径数。实现下列函数:int SimplePath(MGraphG inti, int j, int k);/*求有向图G的顶点i到j之间长度为k的简单路径条数*/图的邻接矩阵存储结构的类型定义如下:typcdef enum DGDN.AGAN GraphKind: / 有向图,有向网,无向图,无向网typcdcf stnict VRTypcadj;/顶点关系类型。对无权图,用1(是)或0(否)表示相邻否: /对带权图,则为权值类型InfoType *info; /该弧相关信息的指针(可无) ArcCell.AdjMatrix(MAX_VERTEX_NUMnMAX_VERTEX_NUM;typcdcf stnic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 班级户外策划方案
- 石河子大学《园林工程制图》2021-2022学年第一学期期末试卷
- 房屋维修协议书范本(11篇)
- 石河子大学《跨文化传播》2023-2024学年第一学期期末试卷
- 沈阳理工大学《数字图像处理》2022-2023学年期末试卷
- 沈阳理工大学《俄罗斯文学史》2022-2023学年第一学期期末试卷
- 沈阳理工大学《超精密制造工程》2023-2024学年第一学期期末试卷
- 国家工商总局 建设工程勘察合同
- 合伙人招募合同
- 2024高考政治一轮复习第三单元发展社会主义民主政治第六课我国的人民代表大会制度课时作业含解析必修2
- 2024年企业数据存储与安全服务合同
- 2022年北京市公务员录用考试《行测》真题及答案解析
- 江苏省泰兴市2024-2025学年高三上学期期中考试语文试题(含答案)
- 家长会教学课件
- 律师事务所律师事务所风险管理手册
- 2024年消防宣传月知识竞赛考试题库500题(含答案)
- 国开2024年秋《机电控制工程基础》形考任务1答案
- 2024年典型事故案例警示教育手册15例
- 高一历史(中外历史纲要上册)期中测试卷及答案
- 20K607 防排烟及暖通防火设计审查与安装
- 一氧化碳中毒培训课件
评论
0/150
提交评论