POJ 1129 平面圖頂點染色


平面圖頂點染色<->其對偶圖(依然是個平面圖)的面染色

再由四色定理,因而最多4種顏色


//0 ms
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 30
char 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();
    }
}
/*
6
A:BEF
B:AC
C:BD
D:CEF
E:ADF
F:ADE
*/



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com