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 访问所有节点的最短路径
|
10月前
|
算法 Python
随机生成迷宫-深度优先搜索算法
在计算机科学中,迷宫生成是一个经典的问题,广泛应用于游戏设计、路径规划等领域。本文将介绍一种常见的迷宫生成算法——深度优先搜索算法(Depth-First Search, DFS),通过随机选择路径进行探索和回溯,最终生成一个随机且有趣的迷宫。
400 1
|
2月前
|
存储 算法
算法BFS经典例题(迷宫,多源BFS,BFS解决拓扑排序,FloodFill算法)
算法BFS经典例题(迷宫,多源BFS,BFS解决拓扑排序,FloodFill算法)
|
2月前
|
存储 算法 数据可视化
LeetCode 题目 97:动态规划、递归到广度优先搜索BFS 实现交错字符串
LeetCode 题目 97:动态规划、递归到广度优先搜索BFS 实现交错字符串
|
3月前
|
人工智能 算法 BI
【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目
【深度优先搜索 图论 树】2872. 可以被 K 整除连通块的最大数目
|
3月前
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(下)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
21 0
|
3月前
|
存储 人工智能
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(中)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
27 0
|
3月前
|
算法
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)(上)
深度优先搜索(DFS、深搜)和广度优先搜索(BFS、广搜)
35 0
|
10月前
|
机器学习/深度学习 算法 测试技术
C++算法:01BFS最短距离的原理和实现
C++算法:01BFS最短距离的原理和实现
|
机器学习/深度学习 存储 算法
判断二分图
给定一个无向图graph,当这个图为二分图时返回true。 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。 graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。
97 0