TC SRM 593 DIV1 250(dfs)

这图最多3色就可以 搜2就行了 

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<stdlib.h>
 5 #include<vector>
 6 #include<algorithm>
 7 #include<string>
 8 using namespace std;
 9 int vis[55][55],c[55][55],f[10],mm;
10 int dis[6][2] = {{1,0},{0,1},{-1,0},{0,-1},{-1,1},{1,-1}},n;
11 int flag,m;
12 int judge(int x,int y)
13 {
14     if(x<0||y<0||x>=n||y>=n)
15     return 0;
16     return 1;
17 }
18 int dfs(int x,int y,vector <string> board,int o)
19 {
20     int i;
21     for(i = 0 ; i < 6 ; i++)
22     {
23         int tx = x+dis[i][0];
24         int ty = y+dis[i][1];
25         if(judge(tx,ty)&&board[tx][ty]=='X')
26         {
27             if(c[tx][ty])
28             {
29                 if(c[tx][ty]!=o)
30                 return 0;
31             }
32             else
33             {
34                 flag = 1;
35                 c[tx][ty] = o;
36                 if(!dfs(tx,ty,board,-o))
37                 return 0;
38             }
39         }
40     }
41     return 1;
42 }
43 class HexagonalBoard
44 {
45     public:
46     int minColors(vector <string> board)
47     {
48         int i,j,k = board.size();
49         n = k;
50         int ff = 1;
51         for(i = 0 ; i < n ; i++)
52         {
53             for(j = 0 ; j < n ; j++)
54             {
55                 if(board[i][j]=='X'&&!c[i][j])
56                 {
57                     m++;
58                     c[i][j] = 1;
59                     if(!dfs(i,j,board,-1))
60                     {
61                         ff=0;
62                         break;
63                     }
64                 }
65             }
66             if(!ff) break;
67         }
68         if(!m) return 0;
69         if(!flag)
70         return 1;
71         if(ff)
72         return 2;
73         else
74         return 3;
75     }
76 };
View Code

 

posted @ 2013-10-07 15:06  _雨  阅读(185)  评论(0编辑  收藏  举报