第10周图(上)第4讲-图遍历的应用.pdf
《第10周图(上)第4讲-图遍历的应用.pdf》由会员分享,可在线阅读,更多相关《第10周图(上)第4讲-图遍历的应用.pdf(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、DFS过程:过程: vv1v2vm 一步一步向前走,当没有可走的相邻顶点时便一步一步向前走,当没有可走的相邻顶点时便回退回退。 8.4 图遍历的应用图遍历的应用 8.4.1 基于深度优先遍历算法的应用基于深度优先遍历算法的应用 【例例8- -2】 假设假设图图G采用邻接表存储,设计一个算法,判断采用邻接表存储,设计一个算法,判断顶点顶点 uv是否有简单路径。是否有简单路径。 从从顶点顶点u开始进行开始进行深度深度优先遍历,优先遍历,当搜索到顶点当搜索到顶点v时表明从顶点时表明从顶点u到到v有有 路径,即:路径,即: 用用形参形参has(调用时其初值置为(调用时其初值置为false)表示顶点)表
2、示顶点uv是否有路径。是否有路径。 uu1u2v 深度优先遍历过程深度优先遍历过程 求解思路求解思路 void ExistPath(AGraph *G,int u,int v,bool ArcNode *p; visitedu=1;/置已访问标记置已访问标记 if (u=v)/找到了一条路径找到了一条路径 has=true;/置置has为为true并结束算法并结束算法 return; p=G-adjlistu.firstarc;/p指向顶点指向顶点u的第一个相邻点的第一个相邻点 while (p!=NULL) w=p-adjvex;/w为顶点为顶点u的相邻顶点的相邻顶点 if (visited
3、w=0)/若若w顶点未访问顶点未访问,递归访问它递归访问它 ExistPath(G,w,v,has); p=p-nextarc;/p指向顶点指向顶点u的下一个相邻点的下一个相邻点 深度优先遍历 【例例8- -3】假设假设图图G采用邻接表存储,设计一个算法输出图采用邻接表存储,设计一个算法输出图G中从中从 顶点顶点u v的一条简单路径(假设图的一条简单路径(假设图G中从中从顶点顶点u v至少有一条简单至少有一条简单 路径)。路径)。 采用采用深度优先遍历的深度优先遍历的方法方法。 增加增加path和和d形参形参,其中,其中path存放顶点存放顶点u到到v的路径,的路径,d表示表示path中的路中
4、的路 径长度,其初值为径长度,其初值为- -1。 当当从顶点从顶点u遍历到顶点遍历到顶点v后,输出后,输出path并返回。并返回。 DFS(G,u,v,path,d)DFS(G,u1,v,path,d)DFS(G,um,v,path,d) um=v 输出输出path并返回并返回 求解思路求解思路 void FindaPath(AGraph *G,int u,int v,int path,int d) /d表示表示path中的路径长度,初始为中的路径长度,初始为-1 int w,i; ArcNode *p; visitedu=1; d+; pathd=u;/路径长度路径长度d增增1,顶点,顶点u
5、加入到路径中加入到路径中 if (u=v)/找到一条路径后输出并返回找到一条路径后输出并返回 printf(一条简单路径为一条简单路径为:); for (i=0;iadjlistu.firstarc; /p指向顶点指向顶点u的第一个相邻点的第一个相邻点 while (p!=NULL) w=p-adjvex;/相邻点的编号为相邻点的编号为w if (visitedw=0) FindaPath(G,w,v,path,d); p=p-nextarc; /p指向顶点指向顶点u的下一个相邻点的下一个相邻点 深度优先遍历 【例例8- -4】假设假设图图G采用邻接表存储,设计一个算法,输出图采用邻接表存储,
6、设计一个算法,输出图G 中从中从顶点顶点u v的所有简单路径。的所有简单路径。 利用利用回溯的回溯的深度深度优先遍历方法优先遍历方法。 从从顶点顶点u开始进行开始进行深度深度优先遍历。增加优先遍历。增加path和和d记录存记录存走过走过的的路径。路径。 若若当前当前扫描的扫描的顶点顶点u = v时,表示找到了一条路径,则输出路径时,表示找到了一条路径,则输出路径path。 当从顶点当从顶点u出发的路径找完后,置出发的路径找完后,置visitedu=0,即,即回溯回溯。 求解思路求解思路 DFS(G,u,v,path,d) 回溯所有路径后结束回溯所有路径后结束 um=v 输出一条输出一条path
7、 DFS(G,u1,v,path,d) DFS(G,um,v,path,d) um=v 输出一条输出一条path DFS(G,um,v,path,d) visitedum=0 回溯回溯 visitedum=0 回溯回溯 visitedu1=0回溯回溯 void FindPath(AGraph *G,int u,int v,int path,int d) /d表示表示path中的路径长度,初始为中的路径长度,初始为-1 int w,i; ArcNode *p; d+; pathd=u;/路径长度路径长度d增增1,顶点,顶点u加入到路径中加入到路径中 visitedu=1;/置已访问标记置已访问标
8、记 if (u=v iadjlistu.firstarc;/p指向顶点指向顶点u的第一个相邻点的第一个相邻点 while (p!=NULL) w=p-adjvex;/w为顶点为顶点u的相邻顶点的相邻顶点 if (visitedw=0)/若若w顶点未访问顶点未访问,递归访问它递归访问它 FindPath(G,w,v,path,d); p=p-nextarc;/p指向顶点指向顶点u的下一个相邻点的下一个相邻点 visitedu=0; 深度优先遍历 恢复环境,使该顶点可重新使用 1 32 4 0 算法执行结果算法执行结果 从从1到到4的所有路径的所有路径: 1 2 4 1 2 3 4 1 0 3 4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 森林经营规划
限制150内