本文主要是介绍poj 1129 Channel Allocation,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!