布置尽可能多的碉堡,儿碉堡之间不会互相摧毁
#include<stdio.h> int m,n; char map[4][4]; int judge(int x,int y) { int i; if(map[x][y]=='X')return 0; for(i=x-1;i>=0;i--) { if(map[i][y]=='o') return 0; if(map[i][y]=='X') break; } for(i=y-1;i>=0;i--) { if(map[x][i]=='o') return 0; if(map[x][i]=='X') break; } return 1; } void DFS(int k,int count) { int x,y; if(k==n*n) { if(count>m) {m=count;return;} } else { x=k/n; y=k%n; if(judge(x,y)) { map[x][y]='o'; DFS(k+1,count+1); map[x][y]='.'; } DFS(k+1,count); } } int main() { int i,j; while(scanf("%d",&n),n) { getchar(); for(i=0;i<n;i++) { for(j=0;j<n;j++) scanf("%c",&map[i][j]); getchar(); } m=0; DFS(0,0); printf("%d\n",m); } return 0; }