您的位置:首页 > 其它

zoj_1002

2015-08-13 22:39 239 查看
终于把这题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]
== 1) return 0;
if(v[i]
== 2) break;
}
for(int i = m; i >= 1; --i){
if(v[i]
== 1) return 0;
if(v[i]
== 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;
}


继续加油
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: