poj1129

来源:互联网 发布:sublime配置c语言 编辑:程序博客网 时间:2024/05/02 16:24
#include <iostream>#include <cstdio>#include <string.h>using namespace std;int n,ans;int mapp[30][30],color[30];bool Judge(int m,int r)//判断m是否与其相连接的点同色{    for(int j=0;j<n;j++)    {        if(mapp[m][j]&&color[j]==r)            return false;    }    return true;}void DFS(int i,int usedcolor){    int j;    if(usedcolor>ans)   return;//小小的剪枝    if(i>n)    {        ans=usedcolor;        return;    }    else{    for(j=1;j<=usedcolor;j++)//如果usedcolor就可以满足条件    {        if(Judge(i,j))        {            color[i]=j;            DFS(i+1,usedcolor);            color[i]=0;//回溯        }    }    if(j>usedcolor)//如果usedcolor种颜色不满足条件,就再增加一种    {        usedcolor++;        color[i]=usedcolor;        DFS(i+1,usedcolor);        color[i]=0;    }    }}int main(){    int i,e;    char s[30];    while(scanf("%d",&n)&&n)    {        memset(mapp,0,sizeof(mapp));        memset(color,0,sizeof(color));        for(i=0;i<n;i++)        {            scanf("%s",s);            for(e=2;e<strlen(s);e++)                mapp[i][s[e]-'A']=1;        }        ans=100;        DFS(0,0);        if(ans==1)  printf("1 channel needed.\n");        else    printf("%d channels needed.\n",ans);    }    return 0;}

原创粉丝点击