您的位置:首页 > 移动开发 > IOS开发

poj 1129 四色定理

2012-07-22 21:17 411 查看
#include <iostream>
using namespace std;
int map[27][27];
int n;
int ans[27];//记录每个点的着色的情况
int ok(int s)
{
for(int i = 0; i < n; i++)//判断是否有相连的并且与该点的颜色相等的
{
if(map[i][s]==1 && ans[i]==ans[s])
return 0;
}
return 1;
}

int dfs(int i,int m)//参数:开始的位置,颜色的多少
{
if(i == n)   //该部分是指所有的点都已经着色成功了
return n ;
for(ans[i] = 1;ans[i]<=m ; ans[i]++)//已经假定了m种颜色
{
if(!ok(i))  //若该点着色的是这个颜色 就继续下面的 否则对下面的点进行着色。
continue;
else
return dfs(i+1,m); //对下一个点进行着色。
}
return 0;
}

int main()
{
int i,j;
char str[35];
int ls;
while(scanf("%d",&n),n)
{
getchar();//去掉回车键
memset(map,0,sizeof(map));
for(i = 0 ;i < n ; i++)//数据输入变成图保存
{
gets(str);
ls = strlen(str);
for(j = 2 ; j < ls ; j++)
map[i][str[j]-'A'] = 1;
}
memset(ans,0,sizeof(ans));
for(i = 1; i <= 4 ; i++)//四色定理,枚举使用的颜色
{
if(dfs(0,i))
break;
}
if(i>1)
printf("%d channels needed.\n",i);
else
printf("1 channel needed.\n");

}
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iostream include system