hdu 1045
#include<stdio.h> #include<stdlib.h> char map[99][99]; int maxsum=0; int sum=0; int N; int safe(int x,int y) { for(int i=x;i>=0;i--) { if(map[i][y]=='X') break; if(map[i][y]=='1') return 0; } for(int i=x;i<N;i++) { if(map[i][y]=='X') break; if(map[i][y]=='1') return 0; } for(int j=y;j<N;j++) { if(map[x][j]=='X') break; if(map[x][j]=='1') return 0; } for(int j=y;j>=0;j--) { if(map[x][j]=='X') break; if(map[x][j]=='1') return 0; } return 1; } void jian(int step) { if(step==N*N) { if(maxsum<sum) maxsum=sum; return ; } if(safe(step/N,step%N)&&map[step/N][step%N]=='.') { map[step/N][step%N]='1'; sum++; jian(step+1); sum--; map[step/N][step%N]='.'; } jian(step+1); } int main() { //freopen("in.txt","r",stdin); while(scanf("%d",&N)) { maxsum=0; sum=0; if(N==0) break; for(int i=0;i<N;i++) scanf("%s",map[i]); jian(0); printf("%d\n",maxsum); } return 0; }