242. 二分图判定

该博客介绍了如何解决图论中的两色染色问题,即给定一个无自环和重边的图,判断是否可以用两种颜色对所有顶点进行染色,使得相邻顶点颜色不同。通过深度优先搜索实现染色算法,并给出C++代码实现及样例分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个具有 n 个顶点的图。

要给图上每个顶点染色,并且要使相邻的顶点颜色不同。

问是否能用最多两种颜色进行染色?题目保证没有重边和自环。

输入

  • 第一行一个整数 n(1≤n≤1000),表示顶点个数
  • 接下来每行有两个整数 x 和 y,表示顶点 x 和 y 之间有一条边,0≤x,y<n,x≠y
  • 以 EOF(end of file) 作为边数据的结束

输出

  • Yes 或 No 表示是否能用两个颜色进行染色

样例 1

输入

3
0 1
1 2
2 0

输出

No
#include<bits/stdc++.h>
using namespace std;

int n;
int color[1001];
vector<int>e[1001];

bool dfs(int v,int c)
{
    color[v]=c;
    for(int i=0;i<e[i].size();i++)
    {
        if(color[e[v][i]]==c)
            return false;
        if(color[e[v][i]]==0&&!dfs(e[v][i],-c))
            return false;
    }
    return true;
}



int main()
{
    while(cin>>n)
    {
        for(int i=0;i<n;i++)
        {
            int v1,v2;
            cin>>v1>>v2;
            e[v1].push_back(v2);
            e[v2].push_back(v1);
        }
        for(int i=0;i<n;i++){
            if(color[i]==0){
                if(!dfs(i,1)){
                    cout<<"No"<<endl;
                    return 0;
                }
            }
        }
        cout<<"Yes"<<endl;
    }
    return 0;
}

详解:https://blog.youkuaiyun.com/li13168690086/article/details/81506044?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164465340716780274127071%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164465340716780274127071&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-81506044.pc_search_result_cache&utm_term=%E4%BA%8C%E5%88%86%E5%9B%BE%E5%88%A4%E5%AE%9A&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值