Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
169894 | A班匡嘉阳 | 冲突 | C++ | 解答错误 | 0 | 1 MS | 260 KB | 863 | 2024-08-20 19:48:05 |
#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; }