1002 Fire Net

用递归实现各种情况的枚举,可以看做是考察DPS的简单实现。

 1 #include <stdio.h>
 2
 3 int n,max,count,target[4][4];
 4
 5 int place(int x,int y){
 6     int i;
 7     for(i=y;i>=0;i--){
 8         if(target[x][i]>0)
 9             return 0;
10         if(target[x][i]<0)
11             break;
12     }
13     for(i=y;i<n;i++){
14         if(target[x][i]>0)
15             return 0;
16         if(target[x][i]<0)
17             break;
18     }
19     for(i=x;i>=0;i--){
20         if(target[i][y]>0)
21             return 0;
22         if(target[i][y]<0)
23             break;
24     }
25     for(i=x;i<n;i++){
26         if(target[i][y]>0)
27             return 0;
28         if(target[i][y]<0)
29             break;
30     }
31     return 1;
32 }
33
34 void DFS(){
35     int i,j;
36     if(count>max)
37         max=count;
38     for(i=0;i<n;i++){
39         for(j=0;j<n;j++){
40             if(!target[i][j]&&place(i,j)){
41                 target[i][j]=1;
42                 count++;
43                 DFS();
44                 count--;
45                 target[i][j]=0;
46             }
47         }
48     }
49 }
50
51 int main(){
52     int i,j;
53     char c;
54     while(1){
55         scanf("%d",&n);
56         if(n==0)
57             break;
58         max=count=0;
59         for(i=0;i<n;i++){
60             getchar();
61             for(j=0;j<n;j++){
62                 scanf("%c",&c);
63                 target[i][j]=(c==‘X‘?-1:0);
64             }
65         }
66         DFS();
67         printf("%d\n",max);
68     }
69     return 0;
70 }
时间: 2024-10-14 00:44:34

1002 Fire Net的相关文章

ZOJ 1002 Fire Net

columns, each representing a street or a piece of wall. A blockhouse is a small castle that has four openings through which to shoot. The four openings are facing North, East, South, and West, respectively. There will be one machine gun shooting thro

[ZOJ 1002] Fire Net (简单地图搜索)

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1002 题目大意: 给你一个n*n的地图,地图上的空白部分可以放棋子,也有墙,问最多能放多少棋子使得棋子两两不会袭击? 棋子袭击当且仅当处在同一行或者同一列上并且中间没有墙的阻隔. 真是好久没写过搜索题了..这道题都写了这么久!! 直接写dfs(x,y,now) 代表我现在站在x点,y点上,那么就只能产生两种状态,放棋子或者不放棋子. 然后写一个C(x,y)代表当

hdu 1045 &amp;&amp; zoj 1002 Fire Net(DFS &amp;&amp; 二分图匹配)

Fire Net Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7958    Accepted Submission(s): 4542 Problem Description Suppose that we have a square city with straight streets. A map of a city is a

ZOJ 1002 Fire Net(DFS啊 )

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=2 Suppose that we have a square city with straight streets. A map of a city is a square board with n rows and n columns, each representing a street or a piece of wall. A blockhouse is a

ZOJ 1002 Fire Net(dfs)

嗯... 题目链接:https://zoj.pintia.cn/problem-sets/91827364500/problems/91827364501 这道题是想出来则是一道很简单的dfs: 将一个4*4的地图给每一个点排序,如下图: 0  1  2  3 4  5  6  7 8  9  10  11 12 13 14 15 设一个点为第k个点,那么它的坐标为(k/n,k%n),根据这个进行dfs,当k == n * n是退出dfs.如果k < n *n,就继续dfs,判断是否能放下,即要

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

zoj题目分类

饮水思源---zoj 转载自:http://bbs.sjtu.edu.cn/bbscon,board,ACMICPC,file,M.1084159773.A.html 注:所有不是太难的题都被归成了“简单题”,等到发现的时候已经太晚了,我太死脑筋 了……:( 有些题的程序我找不到了,555……:( SRbGa的题虽然都很经典……但是由于其中的大部分都是我看了oibh上的解题报告后做 的,所以就不写了…… 题目排列顺序没有规律……:( 按照个人感觉,最短路有的算做了DP,有的算做了图论. 有些比较

DFS题目总结

目录 ZOJ 1002 Fire Net ZOJ 1002 Fire Net AC代码: #include<iostream> using namespace std; int n; int ans; char map[10][10]; bool check(int x,int y); void dfs(int point,int sum); int main() { while(scanf("%d",&n)!= EOF) { if(n==0) break; get

DFS ZOJ 1002/HDOJ 1045 Fire Net

题目传送门 1 /* 2 题意:在一个矩阵里放炮台,满足行列最多只有一个炮台,除非有墙(X)相隔,问最多能放多少个炮台 3 搜索(DFS):数据小,4 * 4可以用DFS,从(0,0)开始出发,往(n-1,n-1)左下角走,x = cnt / n; y = cnt % n; 更新坐标, 4 直到所有点走完为止,因为从左边走到右边,只要判断当前点左上方是否满足条件就可以了 5 注意:当前点不能放炮台的情况也要考虑 6 g[x][y] == 'o'; 的错误半天才检查出来:) 7 */ 8 #inc