• 图的遍历


    深度优先遍历:

      邻接矩阵版

    bool G[1000][1000];
    bool visited[1000]; 
    void dfs(int v){
        visited[v]=true;
        for(int i=1;i<=n;i++){
            if(G[v][i]==true){
                if(visited[i]==false){
                    dfs(i);
                }    
            }
        }
    }
    void dfsTraverse(){
        fill(visited,visited+n+1,false);    //初始化visited数组 
        for(int i=1;i<=n;i++){                //n是图中顶点数量 
            if(visited[i]==false){
                dfs(i);
            }
        }
    }

      邻接表版

    vector<int> G[1000];
    bool visited[1000]; 
    void dfs(int v){
        visited[v]=true;
        for(int i=0;i<G[v].size();i++){
            if(G[v][i]==true){
                if(visited[i]==false){
                    dfs(i);
                }    
            }
        }
    }
    void dfsTraverse(){
        fill(visited,visited+n+1,false);    //初始化visited数组 
        for(int i=1;i<=n;i++){                //n是图中顶点数量 
            if(visited[i]==false){
                dfs(i);
            }
        }
    }

    广度优先遍历

      邻接矩阵版:

    void bfs(int v){
        queue<int> q;
        q.push(v);
        while(!q.empty()){
            int temp=q.front();
            q.pop();
            visited[v]=true;
            for(int i=1;i<=n;i++){
                if(G[temp][i]==true&&visited[i]==false){
                    visited[i]=true;
                    q.push(i);
                }
            }
        }
    }
    void bfsTraverse(){
        fill(visited,visited+n+1,false);    //初始化visited数组 
        for(int i=1;i<=n;i++){                //n是图中顶点数量 
            if(visited[i]==false){
                bfs(i);
            }
        }
    }

      邻接表版:

    vector<int> G[1000];
    bool visited[1000]; 
    void bfs(int v){
        queue<int> q;
        q.push(v);
        while(!q.empty()){
            int temp=q.front();
            q.pop();
            visited[v]=true;
            for(int i=0;i<G[temp].size();i++){
                if(G[temp][i]==true&&visited[i]==false){
                    visited[i]=true;
                    q.push(i);
                }
            }
        }
    }
    void bfsTraverse(){
        fill(visited,visited+n+1,false);    //初始化visited数组 
        for(int i=1;i<=n;i++){                //n是图中顶点数量 
            if(visited[i]==false){
                bfs(i);
            }
        }
    }
  • 相关阅读:
    剑指offer面试题17:合并两个排序的链表
    剑指offer面试题16:反转链表
    剑指offer面试题15:链表中倒数第K个节点
    Jinja2.template渲染两种常见用法
    hadoop集群运维碰到的问题汇总
    hbase配置参数总结
    hbase内核学习总结
    zookeeper学习笔记
    mongodb 3.2性能测试
    kafka内部结构笔记
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13337050.html
Copyright © 2020-2023  润新知