DFS(White-Gray-Black)】的更多相关文章

图通常有两种表示方法: 邻接矩阵 和 邻接表 对于稀疏的图,邻接表表示能够极大地节省空间. 以下是图的数据结构的主要部分: struct Vertex{ ElementType element; //节点的名字 Edge *next;   //所包含的边组成的单链表的头指针 }; struct Edge{ int adj;  //节点的标号(0-number of nodes) Edge *next; }; 注意,实际应用中,节点都有名字,而不是数字,所以我们需要提供从名字到标号的映射. 最简单…
1.问题描写叙述与理解 深度优先搜索(Depth First Search.DFS)所遵循的策略.如同其名称所云.是在图中尽可能"更深"地进行搜索. 在深度优先搜索中,对最新发现的顶点v若此顶点尚有未探索过从其出发的边就探索之. 当v的全部边都被探索过.搜索"回溯"到从其出发发现顶点v的顶点.此过程继续直至发现全部从源点可达的顶点.若图中还有未发现的顶点,则以当中之中的一个为新的源点反复搜索.直至全部的顶点都被发现.与BFS中源顶点是指定的稍有不同. DFS搜索轨迹…
参考<数据结构与算法> 本书在复杂深度优先遍历图时,采用三种颜色标记图中节点 1 white 表示未访问 2 gray 表示已经正在访问,其相邻节点 3 black 表示该节点所有的相邻节点都已经深度优先访问结束 算法可以判断图中是否存在环. 算法如下: #include <iostream> using namespace std; #define MAX_VERTEX_NUM 128 enum color{WHITE, GRAY, BLACK}; bool M[MAX_VERT…
There are generally two methods to write DFS algorithm, one is using recursion, another one is using stack. (reference from Wiki Pedia) Pseudocode for both methods: A recursive implementation of DFS: procedure DFS(G,v): label v as discovered for all…
深度优先非递归实现算法: 1 递归算法: //初始化相关数据结构 DFS(G) ----------------------------------------------------------------------------------- 1 for each vertex u ∈ G.V 2 u.color ← WHITE // paint all vertices white; undiscovered 3 u.π ← NIL 4 time ← 0 // global variabl…
1 深度优先方法 首先需要更改矩阵初始化函数init_graph() 然后我们需要初始化vist标记数组 深度优先访问图,然后根据是否存在back edge判断是否存在环路 算法如下: #include <iostream> using namespace std; #define MAX_VERTEX_NUM 128 enum color{WHITE, GRAY = 1, BLACK}; bool M[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int colour[M…
一 深度优先遍历,参考前面DFS(white and gray and black) 二 根据定点以及边数目进行判断 如果m(edge)大于n(vertex),那么肯定存在环 算法如下: 1 删除所有入度小于等于1的顶点, 并且将和这些顶点相关的顶点入度减1 2 将入度变为1的顶点全部删除,重复上述动作,如果最后还有顶点那么图中存在环 具体代码如下: #include <iostream> using namespace std; #define MAX_VERTEX_NUM 128 enum…
BFS(广搜): 广搜就是广度优先搜索,根据名字可以知道,是通过广度来遍历图,也就是层次遍历吧. 在这里以及下面的DFS(深搜),都用到了颜色WHITE,GRAY,BLACK,不过作用不同,具体分别再分析. 在BFS中,WHITE,GRAY,BLACK这三色是用来记录一个点是否被搜到,以及是否它的邻接点都是灰色.(具体见P324倒数第2段). P326 的图22-3是个经典的图,看了此图基本就知道BFS是干嘛的了. 在图22-3中,因为他是用字母表示的,我把各点定义为顺时针从标号1开始,于是r点…
In a directed graph, we start at some node and every turn, walk along a directed edge of the graph.  If we reach a node that is terminal (that is, it has no outgoing directed edges), we stop. Now, say our starting node is eventually safe if and only…
Question: Detect cycle in a directed graph Answer: Depth First Traversal can be used to detect cycle in a Graph. DFS for a connected graph produces a tree. There is a cycle in a graph only if there is a back edge present in the graph. A back edge is…