#include <stdio.h>
#include <vector>
using namespace std;
int MAX = 0;
bool judge(vector<vector<char> > map, int n, int row, int col){
int i, j;
for(i = row, j = col - 1; j >= 0; j--){//判断左边的
if(map[i][j] == 'x') break;
if(map[i][j] == 'b') return false;
}
for(i = row - 1, j = col; i >= 0; i--){判断上边的
if(map[i][j] == 'x') break;
if(map[i][j] == 'b') return false;
}
return true;
}
void dfs(vector<vector<char> > map, int n, int k, int count){
int row, col;
if(k == n * n){
if(count > MAX) MAX = count;
}
else{
row = k / n;
col = k % n;
if(map[row][col] == '.' && judge(map, n, row, col)){
map[row][col] = 'b';
dfs(map, n, k + 1, count + 1);
map[row][col] = '.';
}
dfs(map, n, k + 1, count);
}
}
int main(){
int n;
int count = 0;
scanf("%d", &n);
vector<vector<char> > map(n, vector<char>(n, '\0'));
while(n){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
scanf("%c", &map[i][j]);
}
}
dfs(map, n, 0, 0);
printf("%d\n", MAX);
MAX = 0;
scanf("%d", &n);
}
return 0;
}
zoj-1002-Fire Net
最新推荐文章于 2021-02-22 21:40:33 发布