POJ 1129 平面图顶点染色

来源:互联网 发布:淘宝扫码怎么扫 编辑:程序博客网 时间:2024/05/01 13:37

平面图顶点染色<->其对偶图(依然是个平面图)的面染色

再由四色定理,因而最多4种颜色


//0 ms#include<cstdio>#include<algorithm>#include<cstring>using namespace std;#define N 30char s[100],cc;bool map[N][N];int c[N],vis[1000000][5];int n,num,o;bool DFS(int step){   if (step > n)return true;    o++;int tmp=o;    memset(vis+tmp,0,sizeof(int)*5);    for (int j=1; j <=n;++j)    if (map[step][j]==1&&c[j]) vis[tmp][c[j]]=1;    for (int i=1; i<=num;++i) if (!vis[tmp][i])    {        c[step] = i;        if (DFS (step + 1)) return true;    }    c[step]=0;    return false;}void doit(){   memset(map,0,sizeof(map));    int len;    for (int i=1;i<=n;i++)         {  scanf("%c:",&cc);            gets(s);            len=strlen(s);            for (int j=0;j<len;j++)                map[cc-'A'+1][s[j]-'A'+1]=1;         }    int ans;    for (ans=1;;ans++)//由四色问题ans应不超过4        {   memset(c,0,sizeof(c)); o=0;            num=ans;            if (DFS(1)) break;        }    if (ans==1)printf("1 channel needed.\n");    else printf("%d channels needed.\n",ans);}int main(){   while (scanf("%d",&n),n)    {gets(s);     doit();    }}/*6A:BEFB:ACC:BDD:CEFE:ADFF:ADE*/


0 0
原创粉丝点击