4 .X.. .... XX.. .... 2 XX .X 3 .X. X.X .X. 3 ... .XX .XX 4 .... .... .... .... 0
樣例輸出
5
1
5
2
4
AC代碼:
#include #include #include using namespace std ; char mp[100][100] ; int n,maxn ; int check(int r,int c) { int flag = 1 ; for(int i = r ;i>=0 ;i--) { if(mp[i][c] == 'X') break ; if(mp[i][c] == 'b') { flag = 0 ; break ; } } for(int j = c ;j>=0 ;j--) { if(mp[r][j] == 'X') break ; if(mp[r][j] == 'b') { flag = 0 ; break ; } } return flag ; } void dfs(int pos,int sum) { int r = pos/n ,c=pos%n; if(pos == n*n) { if(sum > maxn) maxn = sum ; return ; } if(mp[r][c] == '.') { if(check(r,c)) { mp[r][c] = 'b' ; dfs(pos+1,sum+1) ; mp[r][c] = '.' ; } } dfs(pos+1,sum) ; } int main() { while(scanf("%d",&n)!=EOF && n) { memset(mp,0,sizeof(mp)) ; for(int i = 0 ;i>mp[i][j] ; } maxn = 0 ; dfs(0,0) ; printf("%d\n",maxn) ; } return 0 ; }