ZOJ_1002_Fire Net
2012-03-10 20:42
330 查看
这是一道搜索的简单题,题目的数据比较小,采用深搜就可以解决了、、、
代码如下:
#include<stdio.h>
char map[5][5];
int n,count;
//判断在(r,c)的位置是否可以放置碉堡,应为是从小到大开始找的,所以只往前找就可以了、、、
int Check_put(int r,int c){
int i;
//注意不要从小到大找,因为要考虑墙
for(i=r-1; i>=0; i--){ //测试列上是否满足条件
if(map[i][c] == 'o')
return 0;
if(map[i][c] == 'X')
break;
}
for(i=c-1; i>=0; i--){ //测试行上是否满足条件
if(map[r][i] == 'o')
return 0;
if(map[r][i] == 'X')
break;
}
return 1;
}
void Dfs(int k,int cnt){
int x,y;
if(k == n*n){ //找到最后一个的时候进行判断
if(cnt > count){ //保存此次查找能放的最大碉堡数
count = cnt;
return ;
}
}
else{
x = k/n; //行号
y = k%n; //列号
if(map[x][y]=='.' && Check_put(x,y)){ //当前可以放置碉堡,递归进入下一个位置
map[x][y] = 'o'; //放置碉堡
Dfs(k+1, cnt+1); // 进入下一个位置
map[x][y] = '.'; // 回溯
}
Dfs(k+1, cnt); //当前点不能放置碉堡
}
}
int main(){
int i,j;
while(scanf("%d",&n) , n){
for(i=0; i<n; i++){ // 输入地图
getchar();
for(j=0; j<n; j++){
scanf("%c",&map[i][j]);
}
}
count = 0; // 最多可以放置碉堡的数目
Dfs(0,0); //深搜
printf("%d\n",count);
}
return 0;
}
代码如下:
#include<stdio.h>
char map[5][5];
int n,count;
//判断在(r,c)的位置是否可以放置碉堡,应为是从小到大开始找的,所以只往前找就可以了、、、
int Check_put(int r,int c){
int i;
//注意不要从小到大找,因为要考虑墙
for(i=r-1; i>=0; i--){ //测试列上是否满足条件
if(map[i][c] == 'o')
return 0;
if(map[i][c] == 'X')
break;
}
for(i=c-1; i>=0; i--){ //测试行上是否满足条件
if(map[r][i] == 'o')
return 0;
if(map[r][i] == 'X')
break;
}
return 1;
}
void Dfs(int k,int cnt){
int x,y;
if(k == n*n){ //找到最后一个的时候进行判断
if(cnt > count){ //保存此次查找能放的最大碉堡数
count = cnt;
return ;
}
}
else{
x = k/n; //行号
y = k%n; //列号
if(map[x][y]=='.' && Check_put(x,y)){ //当前可以放置碉堡,递归进入下一个位置
map[x][y] = 'o'; //放置碉堡
Dfs(k+1, cnt+1); // 进入下一个位置
map[x][y] = '.'; // 回溯
}
Dfs(k+1, cnt); //当前点不能放置碉堡
}
}
int main(){
int i,j;
while(scanf("%d",&n) , n){
for(i=0; i<n; i++){ // 输入地图
getchar();
for(j=0; j<n; j++){
scanf("%c",&map[i][j]);
}
}
count = 0; // 最多可以放置碉堡的数目
Dfs(0,0); //深搜
printf("%d\n",count);
}
return 0;
}
相关文章推荐
- DFS ZOJ 1002/HDOJ 1045 Fire Net
- ZOJ 1002 Fire Net
- zoj 1002 Fire Net
- ZOJ 1002 Fire Net
- ZOJ 1002 Fire Net Solution
- ZOJ Problem Set - 1002 Fire Net
- ZOJ 1002 - Fire Net
- ZOJ 1002 : Fire Net 一道和8皇后问题十分相似的搜索题
- ZOJ1002 Fire Net DFS(深度优先搜索) 已AC
- ZOJ——1002 Fire Net
- ZOJ&nbsp;1002&nbsp;Fire&nbsp;Net
- zoj 1002 Fire Net
- ZOJ1002 Fire Net
- ZOJ-1002 Fire Net 火力网 题解
- ZOJ 1002 Fire Net
- zoj 1002 Fire Net
- ZOJ 1002:Fire Net
- zoj 1002 Fire Net dfs
- 4000 ZOJ--1002:Fire_Net
- HDOJ 1045 Fire Net同 ZOJ 1002