그래프가 2 색 가능 또는 그 이상인지를 찾고 싶습니다. bipartite 또는 non-bipartite.그래프를 확인하는 방법은 2 색 가능합니까?
여기 내 코드는 C++입니다. Welsh Powell Algorithm을 사용하고 있는데 코드에서 잘못된 부분이있을 수 있습니다. 일부 구석이나 일부 실수가 누락되었을 수 있습니다.
입력 n = 아니오. 정점의 m = no. 에지 기반, 0 기반 인덱싱
#include <iostream>
#include <algorithm>
using namespace std;
pair <int,int> s[1001];
int comp(pair <int,int> s1, pair <int,int> s2)
{
if(s1.first>s2.first)
return 0;
else
return 1;
}
int main()
{
int n,i,j,k,flag=0;
bool a[1001][1001]={false};
int s1[1001]={0};
int s3[1001]={0};
for(i=0;i<1001;i++)
{
s[i].first=0;
s[i].second=i;
//s1[i]=0;
}
long long m;
cin>>n>>m;
while(m--)
{
int x,y;
cin>>x>>y;
if(x==y)
continue;
a[x][y]=true;
a[y][x]=true;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]==true)
s[i].first++;
sort(s,s+n,comp);
int color=1,p=0,z,f;
for(i=0;i<n;i++)
{
k = s[n-i-1].second;
if(s1[k]==0)
{
s1[k]=color;
p=0;
s3[p++]=k;
for(j=n-1;j>=0;j--)
{
f=0;
if(s1[s[j].second]==0)
{
for(z=0;z<p;z++)
{
if(a[s3[z]][s[j].second]==false || s3[z]==s[j].second)
continue;
else
{
f=1;
break;
}
}
if(f==1)
continue;
else
{
s3[z]=s[j].second;
p++;
s1[s[j].second]=color;
}
}
}
color++;
}
if(color==3)
break;
}
for(i=0;i<n;i++)
if(s1[i]==0)
{
flag=1;
break;
}
if(flag==1)
cout<<"NO\n";
else
cout<<"YES\n";
return 0;
}
그것이 잘못되었다는 것을 어떻게 설명 할 수 있습니까? – Guenther
라이브 콘테스트 출신이므로 여기에서 질문에 대해 논의 할 수 없습니다. –
토론 할 수 없다면 우리가 당신을 도울 것이라고 어떻게 기대합니까? – SurvivalMachine