图算法BFS

伪代码

//遍历u所在的连通块
BFS(u)
{
    queue q;
    将u入队
    visq[u] = true;
    while(q非空)
    {
        取出队首元素进行访问;
        for (遍历与u相连的所有顶v) {
            if visq[v] == false; 
            {
            v入队
            visq[v] = true;
            }
        }
    }    
}

BFSTravel(G)
{
    for(G的所有顶点u)
        if visq[u]=false;
        BFS(u);
}

邻接矩阵

int n,G[MAXV][MAXV];
bool visq[MAXV];
//遍历u所在的连通块
void BFS(int u)
{
    queue<int> q;
    q.push(u);
    visq[u] = true;
    while(!q.empty())
    {
        int p= q.front();
        q.pop();
        for (int v = 0 v < n;v++) {
            if (visq[v] == false && G[p][v]!=INF)
            {
            q.push(v);
            visq[v] = true;
            }
        }
    }
}

void BFSTravel(int G[][MAXV])
{
    for(int u = 0;u<n;u++)
    {
        if(visq[u]=false)
            BFS(u);
    }
}

邻接表版

int n;
vector<int> Adj[MAXV];
bool visq[MAXV];
//遍历u所在的连通块
void BFS(int u)
{
    queue<int> q;
    q.push(u);
    visq[u] = true;
    while(!q.empty())
    {
        int p = q.front();
        q.pop();
        for (int i = 0 ;i < Adj[u].size();i++) {
            int v = Adj[u][i];
            if (visq[v] == false)
            {
            q.push(v);
            visq[v] = true;
            }
        }
    }
}

void BFSTravel(int G[][MAXV])
{
    for(int u = 0;u<n;u++)
    {
        if(visq[u]=false)
            BFS(u);
    }
}

很多情况下都会让求深度,这种情况下定义一个结构体

struct Node{
    int v;//顶点编号
    int layer;//顶点层数
};

在相应的的代码中将int 修改为node就行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值