BFS——二分图判断

简介: BFS——二分图判断

image.png

20201210152253971.jpg

算法思想:BFS给所有顶点染色,相邻顶点染不同颜色,染过的顶点检查与相邻顶点是否颜色不同。

#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
const int N=1e4;
int color[N],graph[N][N];
bool bfs(int s,int n){
    queue<int> q;
    q.push(s);
    color[s]=1;
    while(!q.empty()){
        int from=q.front();//取队头颜色,父结点
        q.pop();
        for(int i=1;i<=n;i++){//按层遍历
            if(graph[from][i]&&color[i]==-1){
                q.push(i);
                color[i]=!color[from];//染与父结点不同的颜色
            }
            if(graph[from][i]&&color[from]==color[i]){//如果已经着色检查颜色是否相同
                return false;
            }
        }
    }
    return true;
}
int main(){
    int n,m,a,b,i;
    memset(color,-1,sizeof(color));
    cin>>n>>m;
    for(i=0;i<m;i++){
        cin>>a>>b;
        graph[a][b]=graph[b][a]=1;
    }
    bool flag=false;
    for(i=1;i<=n;i++){
        if(color[i]==-1&&!bfs(i,n)){
            flag=true;
            break;
        }
    }
    if(flag){
        cout<<"No"<<endl;
    }else{
        cout<<"Yes"<<endl;
    }
    return 0;
}
相关文章
|
3月前
|
算法 测试技术
【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径
【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径
|
7月前
|
算法 Python
随机生成迷宫-深度优先搜索算法
在计算机科学中,迷宫生成是一个经典的问题,广泛应用于游戏设计、路径规划等领域。本文将介绍一种常见的迷宫生成算法——深度优先搜索算法(Depth-First Search, DFS),通过随机选择路径进行探索和回溯,最终生成一个随机且有趣的迷宫。
231 1
|
2月前
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(下)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
11 0
|
2月前
|
算法
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(上)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
22 0
|
2月前
|
存储 人工智能
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(中)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
13 0
|
7月前
|
机器学习/深度学习 算法 测试技术
C++算法:01BFS最短距离的原理和实现
C++算法:01BFS最短距离的原理和实现
|
11月前
洛谷P1443 马的遍历——广搜
洛谷P1443 马的遍历——广搜
48 0
|
机器学习/深度学习 存储 算法
判断二分图
给定一个无向图graph,当这个图为二分图时返回true。 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。 graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。
79 0
代码随想录刷题|LeetCode 513. 找树左下角的值 112. 路径总和 113.路径总和|| 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
代码随想录刷题|LeetCode 513. 找树左下角的值 112. 路径总和 113.路径总和|| 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
代码随想录刷题|LeetCode 513. 找树左下角的值 112. 路径总和 113.路径总和|| 106. 从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树
|
算法 C++ Python
BFS逛街算法模板-附LeetCode习题-433. 最小基因变化-广度优先搜索
BFS逛街算法模板-附LeetCode习题-433. 最小基因变化-广度优先搜索