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;
}
相关文章
|
7月前
|
算法 测试技术
【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径
【动态规划】【广度优先搜索】【状态压缩】847 访问所有节点的最短路径
|
6月前
|
存储 算法
算法BFS经典例题(迷宫,多源BFS,BFS解决拓扑排序,FloodFill算法)
算法BFS经典例题(迷宫,多源BFS,BFS解决拓扑排序,FloodFill算法)
|
6月前
|
存储 算法 数据可视化
LeetCode 题目 97:动态规划、递归到广度优先搜索BFS 实现交错字符串
LeetCode 题目 97:动态规划、递归到广度优先搜索BFS 实现交错字符串
|
7月前
|
人工智能 算法 BI
【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目
【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目
|
7月前
|
算法
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(上)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
115 0
|
7月前
|
存储 人工智能
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(中)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
59 0
|
7月前
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(下)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
43 0
|
机器学习/深度学习 算法 测试技术
C++算法:01BFS最短距离的原理和实现
C++算法:01BFS最短距离的原理和实现
|
机器学习/深度学习 存储 算法
判断二分图
给定一个无向图graph,当这个图为二分图时返回true。 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。 graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。
113 0
|
存储
【每日一题Day61】寻找图中是否存在路径 | BFS 并查集
初始时将source设为已访问,并且将其加入队列。之后每次将队列中的节点出队,并将其能够到达的未访问过的节点入队。如果访问到destination,则直接返回true;如果队列为空,仍未访问到destination,则返回false
115 0