第十二周项目4-(5)应用图的深度优先遍历思路求解问题
来源:互联网 发布:演示文稿制作软件 编辑:程序博客网 时间:2024/04/30 06:58
问题及代码:
问题如下:
/*输出通过一个节点的所有简单回路 问题:求图中通过某顶点k的所有简单回路(若存在)*/
具体代码为:
#include <stdio.h>#include <malloc.h>#include "graph.h"int visited[MAXV]; //全局变量void DFSPath(ALGraph *G,int u,int v,int path[],int d)//d是到当前为止已走过的路径长度,调用时初值为-1{ int w,i; ArcNode *p; visited[u]=1; d++; path[d]=u; p=G->adjlist[u].firstarc; //p指向顶点u的第一条边 while (p!=NULL) { w=p->adjvex; //w为顶点u的相邻点 if (w==v && d>0) //找到一个回路,输出之 { printf(" "); for (i=0; i<=d; i++) printf("%d ",path[i]); printf("%d \n",v); } if (visited[w]==0) //w未访问,则递归访问之 DFSPath(G,w,v,path,d); p=p->nextarc; //找u的下一个邻接顶点 } visited[u]=0; //恢复环境:使该顶点可重新使用}void FindCyclePath(ALGraph *G,int k)//输出经过顶点k的所有回路{ int path[MAXV],i; for (i=0; i<G->n; i++) visited[i]=0; //访问标志数组初始化 printf("经过顶点%d的所有回路\n",k); DFSPath(G,k,k,path,-1); printf("\n");}int main(){ ALGraph *G; int A[5][5]= { {0,1,1,0,0}, {0,0,1,0,0}, {0,0,0,1,1}, {0,0,0,0,1}, {1,0,0,0,0} }; //请画出对应的有向图 ArrayToList(A[0], 5, G); FindCyclePath(G, 0); return 0;}
运行结果:
实现程序所用的图为:
知识点总结:
与前几篇博客所提到的一样,依旧为图结构的具体应用,个人认为这个图中所使用的邻接表对于图的表示方法最为合适,一是有向图本身复杂,二是图中各顶点关系复杂,应用邻接矩阵的表示方法并不造成空间的浪费。
心得体会:
在实践中慢慢发现算法的具体精妙之处,恨自己下的功夫还不够深!
0 0
- 第十二周--项目4应用图的深度优先遍历思路求解问题 (5)
- 第十二周项目4-(5)应用图的深度优先遍历思路求解问题
- 第十二周--项目4应用图的深度优先遍历思路求解问题 (3)(4)
- 第十二周--项目4应用图的深度优先遍历思路求解问题 (1)(2)
- 第十二周--项目4应用图的深度优先遍历思路求解问题 (6)(7)
- 第十一周-项目4-5-应用图的深度优先遍历思路求解问题
- 第十一周-项目4-4-应用图的深度优先遍历思路求解问题
- 第十一周-项目4-1-应用图的深度优先遍历思路求解问题
- 第十一周-项目4-2-应用图的深度优先遍历思路求解问题
- 第十一周-项目4-3-应用图的深度优先遍历思路求解问题
- 应用图的深度优先遍历思路求解问题1
- 应用图的深度优先遍历思路求解问题2
- 应用图的深度优先遍历思路求解问题3
- 第十二周 项目4 利用遍历思想求解图问题--深度优先遍历
- 第十一周——项目四(1)—应用图的深度优先遍历思路求解问题
- 第十二周项目4-利用遍历思想求解图问题(2-广度优先遍历)
- 第十二周--数据结构-图的遍历之深度优先遍历求解问题
- 图——应用图的深度优先遍历思路求解问题
- merge include viewstub
- 第十周 项目二 二叉树遍历的递归算法
- C语言 malloc
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- LeetCode 42 Trapping Rain Water
- 第十二周项目4-(5)应用图的深度优先遍历思路求解问题
- 45种攻入网站后台的方法【安全防护策略】
- java aio
- 常见错误小结
- maven基本命令,配置和扩展
- Android测试
- 【Android】瀑布流
- Oralce数据库的优化(面试必问题)
- 第6天