1753 poj Flip Game 据说是枚举,我这种DFS算是枚举不?

题目连接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1035

题目大意:给你一个黑白的棋盘,每次翻一个子(翻的子上下左右也自动翻),看最后能否返程全黑或者全白、最少要几次。

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 int ans = 10000;
 4 char map[10][10];
 5 int pan()
 6 {
 7     int i,j;
 8     for(i = 0;i < 4;i++)
 9     {
10         for(j = 0;j < 4;j++)
11         if(map[0][0] != map[i][j])
12         return 0;
13     }
14     return 1;
15 }
16 int is_map(int i,int j)//边界判断
17 {
18     if(i >= 0&& i < 4 && j >= 0&& j < 4)
19     return 1;
20     return 0;
21 }
22 void reverse(int i,int j)//翻转
23 {
24     if(is_map(i,j))
25     map[i][j] = (map[i][j]+1)%2;
26     if(is_map(i,j-1))
27     map[i][j-1] =(map[i][j-1]+1)%2;
28     if(is_map(i,j+1))
29     map[i][j+1] =(map[i][j+1]+1)%2;
30     if(is_map(i+1,j))
31     map[i+1][j] =(map[i+1][j]+1)%2;
32     if(is_map(i-1,j))
33     map[i-1][j] =(map[i-1][j]+1)%2;
34 
35 
36     return ;
37 }
38 void search(int i,int j,int step)
39 {
40     int x1,x2,y1y2;
41 
42     if(pan())
43     {
44         if(ans > step)
45         ans = step;
46         return;
47     }
48     if(is_map(i,j) == 0)
49     return;
50     if(j < 3 && i >=0 && i <= 3)//这个子不翻翻下一个
51     {
52         search(i,j+1,step);
53     }
54     else
55     {
56         if(i <= 3)
57         {
58             search(i+1,0,step);//
59         }
60     }
61     reverse(i,j);//翻这个子
62     if(j < 3 && i >=0 && i <= 3)//翻这个子。
63     {
64         search(i,j+1,step+1);
65     }
66     else
67     {
68         if(i <= 3)
69         {
70             search(i+1,0,step+1);
71 
72         }
73     }
74     reverse(i,j);//反回来,算是回溯。
75 
76 }
77 int main()
78 {
79     int i,j;
80     for(i = 0;i < 4;i++)
81     {
82         scanf("%s",map[i]);
83     }
84     for(i = 0;i < 4;i++)
85     for(j = 0;j < 4;j++)
86     if(map[i][j] == 'b')
87     map[i][j] = 1;
88     else
89     map[i][j] = 0;
90     search(0,0,0);
91     if(ans != 10000)
92     printf("%d\n",ans);
93     else
94     printf("Impossible\n");
95     return 0;
96 }
posted @ 2012-11-06 18:09  某某。  阅读(179)  评论(0编辑  收藏  举报