• 图的遍历


    深度优先遍历:

      邻接矩阵版

    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);
            }
        }
    }
  • 相关阅读:
    允许debian wheezy支持IOS7+的iphone.
    openSUSE 国内镜像摘要
    策略模式总结
    顺序串
    WindowState注意事项
    NLP | 自然语言处理
    Using Autorelease Pool Blocks
    NSAutoreleasePool & thread
    oc语言特性
    oc语言基础整理
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13337050.html
Copyright © 2020-2023  润新知