在一张地图上建立碉堡(X),要求每行没列不能放两个,除非中间有强挡着。求最多能放多少个碉堡
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 5 using namespace std; int n,ans; char maps[N][N]; int judge(int x,int y) { int i; if(maps[x][y]=='X') return 0; for(i=y;i>=0;i--) { if(maps[x][i]=='D') return 0; if(maps[x][i]=='X') break; } for(i=x;i>=0;i--) { if(maps[i][y]=='D') return 0; if(maps[i][y]=='X') break; } return 1; } void DFS(int step,int k) { int x,y; x=step/n; y=step%n; if(step==n*n) { ans=max(k,ans); return ; } if(judge(x,y)==1) { maps[x][y]='D'; DFS(step+1,k+1); maps[x][y]='.'; } DFS(step+1,k); } int main() { int i; while(cin>>n,n) { for(i=0;i<n;i++) cin>>maps[i]; ans=0; DFS(0,0); cout<<ans<<endl; } return 0; }