DFS, BFS traversal graph (adjacency matrix, adjacency list)

1. DFS traversal graph (leading matrix storage)

#include<cstdio.h>
const int MAXV = 1000;//最大定点数
const int INF = 1000000000;//设置INF为一个很大的数
int n,G[MAXV][MAXV];//n为顶点数
bool vis[MAXV]={false};//如果顶点i被访问,则为true

void DFS(int u , int depth){
    vis[u] = true;
    //如果需要对顶点u进行操作,可以在这里进行
    //下面对所有从u能够到达的分支节点进行枚举
    for(int v = 0 ; v < n ; v++){
        if(vis[v]==false&&G[u][v]!=INF){
            DFS(v,depth+1);//访问v,深度+1
        }
    }
}

void DNSTrave(){
    for(int u = 0 ; u < n ; u++){
        if(vis[u]==false){
            DFS(u,1);
        }
    }
}

2. DFS traversal graph (receiving table storage)

const int MAXV = 1000;
const int INF = 1000000000;
vector<int> Adj[MAXN];//图G的邻接表
int n;//顶点数
bool vis[MAXN] = {false};

void DFS(int u , int depth){
    vis[u] = true;
    //如果要对u进行一些操作,可以在此执行
    for(int i = 0 ; i < Adj[u].size(); i++){
        int v = Adj[u][i];
        if(vis[v] == false){
            DFS(v,depth+1);
        }
    }
}

void DFSTrave(){
    for(int u = 0 ; u < n ; u++){
        if(vis[u] == false){
            DFS(u,1);
        }
    }
}

3. BFS traversal graph (leading matrix)

int n , G[MAXV][MAXV];
bool inq[MAXV] = {false};

void BFS(int u){
    queue<int> q;
    q.push(u);
    inq[u] = true;
    while(!q.empty()){
        int u = q.front();
        q.pop();
        for(int v = 0 ; v < n ; v++){
            if(inq[v] == false && G[u][v]!=INF){
                q.push(v);
                inq[v] = true;
            }
        }
    }
}

void BFSTrave(){
    for(int u = 0 ; u < n ; u++){
        if(inq[u] == false){
            BFS(u);
        }
    }
}

Four, BFS traversal graph (adjacency list)

vector<int> Adj[MAXV];
int n;
bool inq[MAXV] = {false};

void BFS(int u){
    queue<int> q;
    q.push(u);
    inq[u] = true;
    while(!q.empty()){
        int u = q.front();
        q.pop();
        for(int i = 0 ; i < Adj[u].size() ; i++){
            int v = Adj[u][i];
            if(inq[v] == false){
                q.push(v);
                inq[v] = true;
            }
        }
    }
}

void BFSTrave(){
    for(int u = 0 ; u < n ; u++){
        if(inq[u] == false){
            BFS(u);
        }
    }
}

Guess you like

Origin blog.csdn.net/weixin_46025531/article/details/122889441