标签:
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7929 Accepted Submission(s):
4521
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 char map[5][5]; 6 int n,now,ibest,current; 7 bool canput(int row,int col)//判断能不能放 8 { 9 int i; 10 for(i=row-1;i>=0;i--)//判断行 11 { 12 if(map[i][col]==‘O‘) 13 return false; 14 if(map[i][col]==‘X‘) 15 break; 16 } 17 for(i=col-1;i>=0;i--)//判断列 18 { 19 if(map[row][i]==‘O‘) 20 return false; 21 if(map[row][i]==‘X‘) 22 break; 23 } 24 return true; 25 } 26 void dfs(int k,int current) 27 { 28 int x,y; 29 if(k==n*n)//如果遍历完就返回 30 { 31 if(current>ibest)//更新最大的个数 32 ibest=current; 33 return ; 34 } 35 else 36 { 37 x=k/n; 38 y=k%n; 39 if(map[x][y]==‘.‘&&canput(x,y)) 40 { 41 map[x][y]=‘O‘; 42 dfs(k+1,current+1);//下一次递归 43 map[x][y]=‘.‘; 44 } 45 dfs(k+1,current);//当前不放碉堡 46 } 47 } 48 int main() 49 { 50 while(scanf("%d",&n),n) 51 { 52 getchar(); 53 int k=0,i; 54 ibest=0; 55 current=0; 56 for(i=0;i<n;i++) 57 scanf("%s",map[i]); 58 dfs(0,0); 59 printf("%d\n",ibest); 60 } 61 return 0; 62 }
标签:
原文地址:http://www.cnblogs.com/Eric-keke/p/4705038.html