- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[2018年最新整理]C_chap_图的遍历1
* 7.3 图的遍历 图的遍历就是从图的某一顶点出发,遍访图中的每一个顶点,且使得每一顶点仅被访问一次。 图的遍历算法是图的其他算法的基础。图的遍历算法比树的遍历算法复杂,因为从图的某一顶点出发,沿着某一条路经,可能会回到该顶点(存在回路)。 因此,通常用一个数组纪录已经被访问的顶点。 visited [1..n] 其初值为假或零,一旦访问了某结点 vi,便置 visited[ vi ] 为真或者为被访问的次序号。 7.3.1 深度优先遍历 ? 方法:从图中的某一个顶点 v0 出发,访问此顶点,然后 依次从 v0 的没被访问的邻接点出发深度优先遍历图,直至图中所有和 v0 有路径相通的顶点都被访问到;若此时图中仍有结点没有被访问,则另选图中一个未曾访问的顶点作起始点,重复上述过程。 SG1 SG2 SG3 W1、W2和W3 均为 V 的邻接点,SG1、SG2 和 SG3 分别为含顶点W1、W2和W3 的子图。 访问顶点 V ; for (W1、W2、W3 ) 若该邻接点W未被访问, 则从它出发进行深度优先搜索遍历。 V w1 w3 w2 7.3.1 深度优先遍历? 方法:从图中的某一个顶点 v0 出发,访问此顶点,然后 依次从 v0 的没被访问的邻接点出发深度优先遍历图,直至图中所有和 v0 有路径相通的顶点都被访问到;若此时图中仍有结点没有被访问,则另选图中一个未曾访问的顶点作起始点,重复上述过程。 遍历结果:? V1-- V2 -- V4 --V8 -- V5 -- V3 -- V6 -- V7 void DFS(Graph G, int v) { // 从顶点v出发,深度优先搜索遍历连通图 G visited[v] = TRUE; VisitFunc(v); for(w=FirstAdjVex(G, v); w!=0; w=NextAdjVex(G,v,w)) if (!visited[w]) DFS(G, w); // 对v的尚未访问的邻接顶点w // 递归调用DFS } // DFS Boolean visited[MAX]; Status (*VisitFunc)(int v); void DFSTraverse(Graph G, Status (*Visit)(int v)) { // 对图 G 作深度优先遍历。 VisitFunc = Visit; for (v=0; vG.vexnum; ++v) visited[v] = FALSE; // 访问标志数组初始化 for (v=0; vG.vexnum; ++v) if (!visited[v]) DFS(G, v); // 对尚未访问的顶点调用DFS } void DFS(Graph G, int v) { // 从顶点v出发,深度优先搜索遍历连通图 G visited[v] = TRUE; VisitFunc(v); for(w=FirstAdjVex(G, v); w!=0; w=NextAdjVex(G,v,w)) if (!visited[w]) DFS(G, w); // 对v的尚未访问的邻接顶点w // 递归调用DFS } // DFS typedef struct { AdjList vertices; int vexnum, arcnum; int kind; // 图的种类标志 } ALGraph; 图的结构定义(邻接表) typedef struct ArcNode { int adjvex; struct ArcNode *nextarc; } ArcNode; typedef struct VNode { VertexType data; ArcNode *firstarc; } VNode, AdjList[MAX_VERTEX_NUM]; Int FirstAdjVex(ALGraph G, int v) { if( G.vertices[v].firstarc==NULL) return(-1); else return(G.vertices[v].fi
文档评论(0)