这样的叫迭代吗。。最近多做些搜索题了要
分行分列搜 判断满足条件
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 ",ans); 71 } 72 return 0; 73 }