zoukankan      html  css  js  c++  java
  • DFS(White-Gray-Black)

    参考《数据结构与算法》

    本书在复杂深度优先遍历图时,采用三种颜色标记图中节点

    1 white 表示未访问

    2 gray 表示已经正在访问,其相邻节点

    3 black 表示该节点所有的相邻节点都已经深度优先访问结束

     算法可以判断图中是否存在环。

    算法如下:

    #include <iostream>
    using namespace std;
    
    #define MAX_VERTEX_NUM 128
    enum color{WHITE, GRAY, BLACK};
    bool M[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
    int colour[MAX_VERTEX_NUM];
    int dfsNum[MAX_VERTEX_NUM], num;
    int vexnum, edgenum;
    
    void init_graph(){
        cout<<"enter vertex number:"<<endl;
        cin>>vexnum;
        cout<<"enter edge number:"<<endl;
        cin>>edgenum;
    
        int i, j;
        while(edgenum){
            cout<<"add new edge:"<<endl;
            cin>>i>>j;
            M[i - 1][j - 1] = true;
            edgenum--;
        }
    }
    
    void dfs(int u, int p){
        colour[u] = GRAY;
        dfsNum[u] = num++;
        for( int v = 0; v < vexnum; v++){
            if(M[u][v] && v != p){
                if(colour[v] == WHITE) dfs(v, u);
                else if(colour[v] == GRAY)
                    cout<<"back edge between"<<u<<" and"<<v<<endl;
                else cout<<"cross edge between"<<u<<" and"<<v<<endl;;
            }
        }
        colour[u] = BLACK;
    }
    
    void print_dfs_num(){
        for(int v = 0; v < vexnum; v++)
            cout<<dfsNum[v]<<" ";
    }
    
    
    
    int main()
    {
        init_graph();
        dfs(0, -1);
        print_dfs_num();
    
        int ch;
        cin>>ch;
        return 0;
    }
    

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    jQuery 源码基本框架
    jQuery 源码细读 -- $.Callbacks
    Excel等外部程序点击链接会带上IE信息的bug
    &nbsp; 与 空格的区别
    前端模板文件化jQuery插件 $.loadTemplates
    客户端渲染的页面能否被搜索引擎完整收录呢?
    javascript 函数声明问题
    JavaScript 继承机制小记
    link与@import
    tcp_udp
  • 原文地址:https://www.cnblogs.com/wenwangt/p/4925408.html
Copyright © 2011-2022 走看看