dfs+四色定理
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
char str[26];
int used[26];
int a[26][26];
int n;
bool bj;
bool dfs(int id,int color)
{
bool flag;
for(int i=1;i<=color;i++)
{
used[id]=i;
flag=true;
for(int j=0;j<id;j++)
{
//cout<<id<<' '<<j<<endl;
if(used[id]==used[j]&&a[id][j]==1)
{
flag=false;
break;
}
}
if(flag==true&&(id==n-1||dfs(id+1,color)))
{
return true;
}
}
return false;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
memset(a,0,sizeof(a));
memset(used,-1,sizeof(used));
bj=true;
for(int i=0;i<n;i++)
{
scanf("%s",str);
for(int j=2;str[j];j++,bj=false)
{
a[i][str[j]-'A']=1;
a[str[j]-'A'][i]=1;
}
}
if(bj)
printf("1 channel needed.\n");
else if(dfs(0,2))
printf("2 channels needed.\n");
else if(dfs(0,3))
printf("3 channels needed.\n");
else
printf("4 channels needed.\n");
}
return 0;
}
poj 1129 Channel Allocation
最新推荐文章于 2020-10-27 17:05:20 发布