您的位置:首页 > 其它

POJ 1129 平面图顶点染色

2014-08-05 09:38 375 查看
平面图顶点染色<->其对偶图(依然是个平面图)的面染色

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

//0 ms
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define N 30
char s[100],cc;
bool map

;
int c
,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
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: