提交时间:2024-08-20 19:48:05

运行 ID: 169894

#include<bits/stdc++.h> using namespace std; int n,maxn; char s[1005][1005]; void dfs(int p,int cnt){ if(p == n * n){ maxn = max(maxn,cnt); return; } int x = p / n; int y = p % n; dfs(p + 1,cnt); if(s[x][y] == '.'){ bool op = 1; for(int i = x;i < n;i++){ if(s[i][y] == 'X') break; if(s[i][y] == 'Q') op = 0; } for(int i = x;i >= 0;i--){ if(s[i][y] == 'X') break; if(s[i][y] == 'Q') op = 0; } for(int i = y;i < n;i++){ if(s[x][i] == 'X') break; if(s[x][i] == 'Q') op = 0; } for(int i = y;i >= 0;i--){ if(s[x][i] == 'X') break; if(s[x][i] == 'Q') op = 0; } if(op){ s[x][y] = 'Q'; dfs(p + 1,cnt + 1); s[x][y] = '.'; } } } int main(){ while(cin >> n && n){ maxn = 0; for(int i = 0;i < n;i++) cin >> s[i]; dfs(0,0); cout << maxn; } return 0; }