美文网首页
染色判断二分图

染色判断二分图

作者: 优劣在于己 | 来源:发表于2020-10-23 20:40 被阅读0次

vector<int>a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
->a[]={1,2,3}

//bfs
#include<bits/stdc++.h>
const int maxn=1000;
using namespace std;
vector<int> G[maxn];  // 存边
int col[maxn];        // 标记顶点颜色
int n,m;         // 点和边的个数
bool bfs(){
  queue<int> q;
  q.push(1);     // 放入第一个点
  memset(col,0,sizeof(col));
  col[1] = 1;    // 先标记第一个点为1
  while(!q.empty()){
    int v = q.front();
    q.pop();
    for(int i=0;i<G[v].size();i++){
      int xx = G[v][i];
      if(col[xx] == 0){      // 判断这个点是否标记过
        col[xx] = -col[v];   // 没有标记过就标记上与v相反的颜色
        q.push(xx);
      }
      else{
        if(col[v] == col[xx]){    // 如果颜色冲突说明不是二分图
          return false;
        }
      }
    }
  }
  return true;
}
int main(){
    int n,m;
    int a,b;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        cin>>a>>b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    if(bfs())cout<<"yes"<<endl;
    else cout<<"no"<<endl;
    return 0;
}

//dfs
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=1005;
vector<int>G[maxn];
int color[maxn];
bool dfs(int u,int c){
    color[u]=c;
    for(int i=0;i<G[u].size();i++){
        if(color[G[u][i]]==c)return false;//相同色剪掉
        else if(color[G[u][i]]==0&&!dfs(G[u][i],-c))return false;
    }
    //都染色返回true
    return true;
}
int main(){
    int n,m;
    cin>>n>>m;
    memset(color,0,sizeof color);
    for(int i=0;i<m;i++){
        int a,b;
        cin>>a>>b;
        G[a].push_back(b);
        G[b].push_back(a);
    }
    int fl=0;
    for(int i=1;i<=n;i++){
        if(!color[i]){
            if(!dfs(i,1)){
                fl=1;
                break;
            }
        }
    }
    if(fl)cout<<"no"<<endl;
    else cout<<"yes"<<endl;
    return 0;
}

相关文章

  • 785. 判断二分图

    785. 判断二分图 染色法

  • 染色判断二分图

    vector a;a.push_back(1);a.push_back(2);a.push_back(3);->a...

  • 二分图染色(判断是否二分图)

    二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(...

  • 二分图

    一个图是二分图当且仅当图中不含有奇数环 染色法判定二分图: 由于图中不含有奇数换,所以染色过程一定没有矛盾 如果一...

  • 二分图基础知识

    前言:总结一下二分图相关的知识点 0X00 基础 判断是不是二分图 785. 判断二分图 DFS 遍历所有节点,遍...

  • Graphcoloring |-牛客(二分图判定)

    Graphcoloring |题意:给一个无向完全连通图,试问这个图是不是二分图。假如是就输出各个点的染色情况。如...

  • LeetCode 785. 判断二分图

    题目 785. 判断二分图 描述 给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节...

  • LeetCode 785. 判断二分图

    1、题目 785. 判断二分图 2、题解 这道题目乍看之下并不难,不过写起来还是有点蛋疼。首先,二分图是指你把点分...

  • 双栈排序//二分图染色|模拟

    题目描述 Tom最近在研究一个有趣的排序问题。如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入...

  • 王道中:我怎样画工笔牡丹

    大红染色和墨紫染色法 粉红染色和紫红染色法 叶片着色步骤图 芽叶着色步骤图 干与叶芽的染法 各色牡丹画法示范 状元...

网友评论

      本文标题:染色判断二分图

      本文链接:https://www.haomeiwen.com/subject/uykbmktx.html