ZOJ 1002 Fire Net
2012-05-04 15:12
369 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2
一道搜索的题目,数据量不是很大用深搜。判定一个点是不是能否放置碉堡,搜索其上方与左方是不是放置了碉堡。同时还要搜索该位置不放置碉堡(即使能放置)的情况。开始的时候没考虑到这一点,每次运行的结果总是0。考虑后,问题就解决了。程序如下;
一道搜索的题目,数据量不是很大用深搜。判定一个点是不是能否放置碉堡,搜索其上方与左方是不是放置了碉堡。同时还要搜索该位置不放置碉堡(即使能放置)的情况。开始的时候没考虑到这一点,每次运行的结果总是0。考虑后,问题就解决了。程序如下;
/* ID: csuchenan PROG: zoj 1002 Fire Net LANG: C++ */ #include<iostream> #include<string.h> #include<stdio.h> using namespace std ; int map[6][6] ; int n ; int ncount ; void solve(int x , int y) ; bool judge(int x , int y) ; int main() { int i ; int j ; char c ; while(scanf("%d" , &n) &&n) { getchar() ; ncount = 0 ; memset(map , 0 , sizeof(map)) ; for(i = 0 ; i < n ; i ++) { for(j = 0 ; j < n ; j ++) { c = getchar() ; if(c == '.') map[i][j] = 1 ; else map[i][j] = 0 ; } getchar() ; } solve(0 , 0) ; printf("%d\n" , ncount) ; } return 0 ; } void solve(int x , int y) { if(x == n * n) { if(ncount < y) ncount = y ; return ; } int i ; int j ; i = x / n ; j = x % n ; if(map[i][j] == 1 && judge(i , j)) { map[i][j] = 2 ; solve(x + 1 , y + 1) ; map[i][j] = 1 ; } solve(x + 1 , y) ; return ; } bool judge(int x , int y) { int i ; for(i = x - 1 ; i >= 0 ; i --) { if(map[i][y]== 2) return false ; if(map[i][y]== 0) break ; } for(i = y - 1 ; i >= 0 ; i --) { if(map[x][i] == 2) return false ; if(map[x][i] == 0) break ; } return true ; }
相关文章推荐
- ZOJ&nbsp;1002&nbsp;Fire&nbsp;Net
- ZOJ 1002 Fire Net
- ZOJ 1002 Fire Net 深度优先搜索算法
- fire net(zoj1002)
- ZOJ 1002 Fire Net
- ZOJ 1002 Fire Net
- zoj1002 Fire Net
- ZOJ 1002:Fire Net
- 4000 ZOJ--1002:Fire_Net
- ZOJ 1002 Fire Net
- ZOJ 1002 Fire Net 分析与解答
- HDOJ 1045 Fire Net同 ZOJ 1002
- ZOJ 1002 Fire Net 分析与解答
- ZOJ 1002 Fire Net
- zoj 1002 Fire Net
- ZOJ 1002 - Fire Net 的答案(回溯法)
- zoj1002-Fire Net
- 8皇后加墙版 ZOJ 1002 Fire Net
- ZOJ 1002 Fire Net
- zoj 1002 Fire Net【DFS】