hdu4499Cannon(搜索)

链接

这样的叫迭代吗。。最近多做些搜索题了要 

分行分列搜 判断满足条件 

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<stdlib.h>
 6 using namespace std;
 7 int o[8][8],n,m,q,p[8][8];
 8 int ans;
 9 int judge(int x,int y)
10 {
11     int i,j,kk=0;
12     if(o[x][y])
13     return 0;
14     for(i = x-1 ; i>= 0 ;i--)
15     if(o[i][y]||p[i][y])
16     break;
17     for(j = i-1 ; j>=0 ; j--)
18     if(o[j][y]||p[j][y])
19     {
20         if(p[j][y]) return 0;
21         break;
22     }
23     for(i = y-1 ; i>= 0 ;i--)
24     if(o[x][i]||p[x][i])
25     break;
26     for(j = i-1 ; j>=0 ; j--)
27     if(o[x][j]||p[x][j])
28     {
29         if(p[x][j]) return 0;
30         break;
31     }
32     return 1;
33 }
34 void dfs(int oi,int y,int v)
35 {
36     int i,flag=0;
37     if(y>=m)
38     {
39         y = 0;
40         dfs(oi+1,y,v);
41         return ;
42     }
43     if(oi>=n)
44     {
45         ans = max(ans,v);
46         return ;
47     }
48     dfs(oi,y+1,v);
49     if(judge(oi,y))
50     {
51         p[oi][y] = 1;
52         dfs(oi,y+1,v+1);
53         p[oi][y] = 0;
54     }
55 }
56 int main()
57 {
58     int i,x,y,j;
59     while(scanf("%d%d%d",&n,&m,&q)!=EOF)
60     {
61         memset(o,0,sizeof(o));
62         memset(p,0,sizeof(p));
63         ans = 0;
64         for(i = 1 ; i <= q ; i++)
65         {
66             scanf("%d%d",&x,&y);
67             o[x][y] = 1;
68         }
69         dfs(0,0,0);
70         printf("%d\n",ans);
71     }
72     return 0;
73 }
View Code

 

 

 

posted @ 2013-08-26 14:48  _雨  阅读(252)  评论(0编辑  收藏  举报