算法-图论-环的检测
来源:互联网 发布:mac卸载google chrome 编辑:程序博客网 时间:2024/06/05 09:38
图论-环的检测
对于最短路径貌似还有很多的算法.先暂且搁置一边,看看图论中环的检测.
思想: 利用深度优先遍历.
图式 如下:
主要代码:
/************************************************************************//* 函数功能:环的检测 参数说明:weightGraph 加权无向图 visitedNum 记录每个节点被访问到的时间 vNum 节点的个数 startPos 开始访问节点的索引 index 记录访问到该节点的遍历时间 visitedGraph 标记边访问与否 思路:在无向图中,访问之后,对点进行标记,且将访问的边标记为已访问。 在遍历的时候发现点已经在之前访问,但是与邻居之间的边却没有遍历过,说明存在着环*//************************************************************************/bool Graph::CycleDetectionDFS( int weightGraph[10][10],int *visitedNum,int vNum,int startPos,int index,bool visitedGraph[10][10] ){ //尽管这里也是使用的是深度优先遍历,但开始并不判断是否已经访问过此节点。*(visitedNum+startPos)=index++;for (int i=0;i<vNum;i++){if (weightGraph[startPos][i]>0){if (*(visitedNum+i)==0)//若节点还未被访问{//将边放入已访问的边集合中visitedGraph[startPos][i]=visitedGraph[i][startPos]=true;bool bExistCycle=CycleDetectionDFS(weightGraph,visitedNum,vNum,i,index,visitedGraph);//深度优先遍历return bExistCycle;}else if (visitedGraph[startPos][i]==false){return true;}}}return false;}/************************************************************************//*函数功能:有向图中环的检测 参数说明:weightGraph 有向加权图 visitedNum 记录每个节点被访问到的时间 vNum 节点的个数 startPos 开始遍历的节点的索引 index 记录访问到该节点的遍历时间*//************************************************************************/bool Graph::digraphCycleDectionDFS( int weightGraph[10][10],int *visitedNum,int vNum,int startPos,int index ){//有向图中与无向图不一样在于:可能遍历为*(visitedNum+startPos)=index++;for (int i=0;i<vNum;i++){if (weightGraph[startPos][i]>0){if (*(visitedNum+i)==0)//若还没有被访问过{bool bExistCycle=digraphCycleDectionDFS(weightGraph,visitedNum,vNum,i,index);return bExistCycle;}else if (*(visitedNum+i)>0){return true;}}}return false;}
运行结果为两种情况下都有环的存在
小结:
1)对节点判断访问不是简单的true或者false,以数值的方式来判定,较后面对应的数值将会越大
0 0
- 算法-图论-环的检测
- 单链表的环检测算法
- 作弊用户的检测算法
- 面试算法:链表成环的检测
- SIFT检测算法的实现
- FT检测算法检测
- opencv轮廓检测之椭圆检测-----算法篇(9)--检测椭圆的其他算法
- Harris角点检测算法的思想
- 内存泄漏检测程序的算法优化
- 关于足球比赛的越位检测算法
- 碰撞检测中的K_DOPS算法的研究
- 鲁棒的圆检测算法
- 算法趣题 : 检测玻璃瓶的强度
- 【转载】边缘检测算法的四个步骤
- 算法趣题 : 检测玻璃瓶的强度
- 用md5算法检测文件的完整性
- 基于Adaboost的人脸检测算法
- 基于canny的边缘检测算法:
- Ubuntu打开终端的方法三种
- oracle存储过程实例
- C++ FAQ
- SQL SERVER – Introduction to SQL Server Encryption and Symmetric Key Encryption Tutorial with Script
- 获取GRIDVIEW中的TemplateField显示的文本值
- 算法-图论-环的检测
- Android工作学习笔记之图片自适应imageview属性android:scaleType
- 《C++ Primer》Chapt 7 Functions
- 走进cassandra之三:分区器
- setitimer设置定时器测试---2
- 哈希表实现
- iOS通过http post上传图片
- 走进cassandra之四:副本机制
- 数据包接收系列 — IP协议处理流程(一)