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

 

 

 

你可能感兴趣的:(HDU)