HDU 1045 Fire Net(DFS)

题目链接

普通的DFS。

  1 #include <stdio.h>
  2 #include <string.h>
  3 char p[5][5];
  4 int max,o[5][5],n;
  5 int judge(int x,int y)
  6 {
  7     int i,z = 1;
  8     for(i = x+1;i <= n-1;i ++)
  9     {
 10         if(o[i][y] == 2)
 11         {
 12             z = 0;
 13             break;
 14         }
 15         else if(o[i][y] == 1)
 16         break;
 17     }
 18     for(i = x-1;i >= 0;i --)
 19     {
 20         if(o[i][y] == 2)
 21         {
 22             z = 0;
 23             break;
 24         }
 25         else if(o[i][y] == 1)
 26         break;
 27     }
 28     for(i = y+1;i <= n-1;i ++)
 29     {
 30         if(o[x][i] == 2)
 31         {
 32             z = 0;
 33             break;
 34         }
 35         else if(o[x][i] == 1)
 36         break;
 37     }
 38     for(i = y-1;i >= 0;i --)
 39     {
 40         if(o[x][i] == 2)
 41         {
 42             z = 0;
 43             break;
 44         }
 45         else if(o[x][i] == 1)
 46         break;
 47     }
 48     return z;
 49 }
 50 void dfs(int x,int y,int step)
 51 {
 52     int r,c;
 53     if(x > n-1)
 54     {
 55         if(max < step)
 56             max = step;
 57         return ;
 58     }
 59     if(y == n-1)
 60     {
 61         r = x+1;
 62         c = 0;
 63     }
 64     else
 65     {
 66         r = x;
 67         c = y+1;
 68     }
 69     if(o[x][y] == 0)
 70     {
 71         if(judge(x,y))
 72         {
 73             o[x][y] = 2;
 74             dfs(r,c,step+1);
 75             o[x][y] = 0;
 76             dfs(r,c,step);
 77         }
 78         else
 79         {
 80             dfs(r,c,step);
 81         }
 82     }
 83     else
 84         dfs(r,c,step);
 85 }
 86 int main()
 87 {
 88     int i,j;
 89     while(scanf("%d%*c",&n)!=EOF)
 90     {
 91         if(!n) break;
 92         max = 0;
 93         memset(o,0,sizeof(o));
 94         for(i = 0; i <= n-1; i ++)
 95             gets(p[i]);
 96         for(i = 0; i <= n-1; i ++)
 97             for(j = 0; j <= n-1; j ++)
 98             {
 99                 if(p[i][j] == 'X')
100                     o[i][j] = 1;
101             }
102         dfs(0,0,0);
103         printf("%d\n",max);
104     }
105     return 0;
106 }
posted @ 2012-07-20 21:13  Naix_x  阅读(154)  评论(0编辑  收藏  举报