终于把这题A了,在阅读了多人的博客的情况下,接着找这类题继续做
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSIZE 10
char v[MAXSIZE][MAXSIZE];
//0 -> null 1 -> block 2 -> fire
int ans = 0, step = 0, cnt = 0;
int line;
int find(int m, int n){
for(int i = m; i <= line; ++i){
if(v[i][n] == 1) return 0;
if(v[i][n] == 2) break;
}
for(int i = m; i >= 1; --i){
if(v[i][n] == 1) return 0;
if(v[i][n] == 2) break;
}
for(int i = n; i <= line; ++i){
if(v[m][i] == 1) return 0;
if(v[m][i] == 2) break;
}
for(int i = n; i >= 1; --i){
if(v[m][i] == 1) return 0;
if(v[m][i] == 2) break;
}
return 1;
}
int dfs(){
if(cnt >= ans){
ans = cnt;
}
for(int i = 1; i <= line; ++i){
for(int j = 1; j <= line; ++j){
if(!v[i][j] && find(i, j)){
v[i][j] = 1;
cnt++;
dfs();
v[i][j] = 0;
cnt--;
}
}
}
return ans;
}
int main(){
char ch;
while(scanf("%d", &line) && line){
memset(v, 2, sizeof(v));
ans = 0;
for(int i = 1; i <= line; ++i){
getchar();
for(int j = 1; j <= line; ++j){
scanf("%c", &ch);
if(ch == '.') v[i][j] = 0;
else if(ch == 'X') v[i][j] = 2;
}
}
dfs();
printf("%d\n", ans);
}
return 0;
}
继续加油