poj 1129 四色定理

来源:互联网 发布:淘宝技巧 知乎 编辑:程序博客网 时间:2024/05/13 17:56
#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;  }  

原创粉丝点击