• poj 1129 Channel Allocation ( dfs )


    题目:http://poj.org/problem?id=1129

    题意:求最小m,使平面图能染成m色,相邻两块不同色
    由四色定理可知顶点最多需要4种颜色即可。我们于是从1开始试到3即可。

     1 #include <iostream>
     2  #include<cstdio>
     3  #include<cstring>
     4  #include<cstdlib>
     5  #include<stack>
     6  #include<queue>
     7  #include<iomanip>
     8  #include<cmath>
     9  #include<map>
    10  #include<vector>
    11  #include<algorithm>
    12  using namespace std;
    13  
    14  int n,G[30][30],vis[30][5],ans;
    15  void pri()
    16  {
    17      int f=-1;
    18      for(int i=0; i<4; i++)
    19      {
    20          for(int j=0; j<n; j++)
    21              if(vis[j][i]&&f<i)
    22                  f=i;
    23      }
    24      if(ans>f)
    25          ans=f;
    26  }
    27  void dfs(int x)
    28  {
    29      if(x>=n)
    30      {
    31          pri();
    32          return;
    33      }
    34      for(int i=0; i<4; i++)
    35      {
    36          int f=1;
    37          for(int j=0; j<n; j++)
    38          {
    39              if((G[j][x]&&vis[j][i])||(G[x][j]&&vis[j][i]))
    40              {
    41                  f=0;
    42                  break;
    43              }
    44          }
    45          if(f)
    46          {
    47              vis[x][i]=1;
    48              dfs(x+1);
    49              vis[x][i]=0;
    50          }
    51      }
    52  }
    53  int main()
    54  {
    55      char s[30];
    56      while(cin>>n&&n)
    57      {
    58          memset(G,0,sizeof(G));
    59          memset(vis,0,sizeof(vis));
    60          for(int i=0; i<n; i++)
    61          {
    62              cin>>s;
    63              int u=s[0]-65;
    64              for(int j=2; s[j]; j++)
    65              {
    66                  int v=s[j]-65;
    67                  G[u][v]=1;
    68              }
    69          }
    70          ans=10;
    71          vis[0][0]=1;
    72          dfs(1);
    73          ans+=1;
    74          if(ans == 1)
    75          printf("1 channel needed.
    ");
    76          else
    77          printf("%d channels needed.
    ",ans);
    78      }
    79      return 0;
    80  }
    81  
  • 相关阅读:
    wordpress升级需设置ftp的解决方法
    用命令创建MySQL数据库
    MySQL创建用户与授权
    MySQL基本命令和常用数据库对象
    转换说明符和转换说明修饰符
    html-webpack-plugin
    数据库-之MySQL的dos命令
    浅谈Java拆箱、装箱
    Java基础问题10问
    Java单例类
  • 原文地址:https://www.cnblogs.com/bfshm/p/3287841.html
Copyright © 2020-2023  润新知