zoukankan      html  css  js  c++  java
  • 图的遍历

    深度优先遍历:

      邻接矩阵版

    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);
            }
        }
    }
  • 相关阅读:
    批量创建账号脚本
    shell 批量创建_备份 mysql 数据库 表
    优化chkconfig
    cut 命令
    Shell for 循环
    while 读取文件内容
    生成随机数
    linux 资源管理
    shell 脚本后台运行知识
    while 语句
  • 原文地址:https://www.cnblogs.com/foodie-nils/p/13337050.html
Copyright © 2011-2022 走看看