/*
http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1162

本题妙处:
用一个数对行取商是行的坐标 对行取余是列的坐标;
注意: 二位数组必须从[0][0]开始,并且这个数也是从零开始的;

以前做的题目都是在for循环里面进行递归

*/

include

include

include

include

include

include

include

using namespace std;
char diaoBao[5][5];
int m,min1=0;
bool isFang(int x,int y)
{
for(int i=x-1; i>=0; i--)
{
if(diaoBao[i][y]=='0')//此点是否和以前放置的点冲突,0代表此行和它离的最近的点已经放置过直接返回假值
return false;
if(diaoBao[i][y]=='X')//遇到墙了,说明此行可以放置退出 看看列是否能放置
break;
}
for(int i=y-1; i>=0; i--)// 列
{
if(diaoBao[x][i]=='0')
return false;
if(diaoBao[x][i]=='X')
break;
}
return true;
}
void dfs(int cur,int s)
{
if(cur==m*m)
{
if(s>min1)
min1=s;
return;
}
int x=cur/m;//行的坐标
int y=cur%m;//列的坐标

if(diaoBao[x][y]=='.'&&isFang(x,y))//满足条件能够放置
{
    diaoBao[x][y]='0';
    dfs(cur+1,s+1);//能够放置的条件下  s+1
    diaoBao[x][y]='.';
}
dfs(cur+1,s);//注意:  前面不能加 else  不满足条件的情况下s不再加1   但是在满足条件下上一步已经执行了,这一步只是起到
                 //向下一步继续扩展不影响s的值

}
int main()
{
while(scanf("%d",&m),m)
{
min1=0;
memset(diaoBao,'.',sizeof(diaoBao));
for(int i=0; i<m; i++)
scanf("%s",diaoBao[i]);
dfs(0,0);
printf("%d\n",min1);
}
return 0;
}

Fire Net(深搜 和一前不一样的深搜)的更多相关文章

  1. centos 目录结构 快捷键 ls命令,alias别名,so:动态库 a:静态库,环境变量PATH,Ctrl+z 暂停命令,Ctrl+a 光标到行首,Ctrl+e 光标到行尾,Ctrl+u 删除光标前所有字符 Ctrl+r 搜索命 hash命令 Ctrl+左箭头/右箭头 cd命令 第三节课

    centos 目录结构 快捷键 ls命令,alias别名,so:动态库 a:静态库,环境变量PATH,Ctrl+z 暂停命令,Ctrl+a 光标到行首,Ctrl+e 光标到行尾,Ctrl+u 删除光标 ...

  2. UVA - 11624 Fire! bfs 地图与人一步一步先后搜/搜一次打表好了再搜一次

    UVA - 11624 题意:joe在一个迷宫里,迷宫的一些部分着火了,火势会向周围四个方向蔓延,joe可以向四个方向移动.火与人的速度都是1格/1秒,问j能否逃出迷宫,若能输出最小时间. 题解:先考 ...

  3. 什么时候用深搜(dfs)什么时候用广搜(bfs)(转)

    1.BFS是用来搜索最短径路的解是比较合适的,比如求最少步数的解,最少交换次数的解,因为BFS搜索过程中遇到的解一定是离根最近的,所以遇到一个解,一定就是最优解,此时搜索算法可以终止.这个时候不适宜使 ...

  4. POJ 1128 拓扑排序 + 深搜

    /* (⊙v⊙)嗯 貌似是一个建图 拓扑+深搜的过程.至于为什么要深搜嘛..一个月前敲得题现在全部推了重敲,于是明白了.因为题意要求如果有多个可能的解的话. * 就要输出字典序最小的那个.所以可以对2 ...

  5. nyoj-20-吝啬的国度(深搜)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 在一个吝啬的国度里有N个城市.这N个城市间仅仅有N-1条路把这个N个城市连接起来.如今,Tom在第S号城市 ...

  6. 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)

    #include <iostream> #include <stdio.h> #include <cstdlib> #include <cstring> ...

  7. 图的基本操作(基于邻接表):图的构造,深搜(DFS),广搜(BFS)

    #include <iostream> #include <string> #include <queue> using namespace std; //表结点 ...

  8. 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS

    图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...

  9. 【深搜(DFS)-例题-踏青】-C++

    描述 小白和他的朋友周末相约去召唤师峡谷踏青.他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地.草丛通过上下左右 4 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都 ...

随机推荐

  1. 分享最近和同事处理的 解析XML的相关问题

    CREATE OR REPLACE PROCEDURE BATCHINSERTSK_DEVICE_RECORD1(      xmlstr  IN clob,          v_commits o ...

  2. C# List

    命名空间:using System.Collections; class Program {//做个比较 static void Main(string[] args) { //new对象 Cls a ...

  3. mem 族函数的实现

    1.void * memcpy ( void * dest, const void * src, size_t num ); 头文件:#include <string.h>memcpy() ...

  4. 平衡搜索树(二) Rb 红黑树

    Rb树简介 红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black.通过对任何一条从根到叶子简单 路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍, ...

  5. 1.dubbo的安装 quickstart

    按照官网给定的指导,执行下面的步骤即可 1.Import the dubbo source code to eclipse project 在eclipse中安装git插件 egit 直接可以从git ...

  6. java设计模式——单例(Singleton)模式

    在某些场景,你需要找到一个承担职责的对象,并且这个对象是他所属类的唯一实例.此时可以使用单例模式. 单例模式的意图是为了确保一个类有且仅有一个实例,并为他提供一个全局的访问点.创建一个担当独一无二角色 ...

  7. Float之谜

    先来看几个例子: public class Thirtyfirst1{ public static void main(String[] args){ int i = 2000000000; int ...

  8. javascript常用内置对象总结(重要)

    Javascript对象总结 JS中内置了17个对象,常用的是Array对象.Date对象.正则表达式对象.string对象.Global对象 Array对象中常用方法: Concat():表示把几个 ...

  9. 兼容IE6的页面底部固定层CSS代码

    有时候当我们需要把一个元素固定在页面的某个部位,一般都是用css中的“position:fixed;”方法来解决,但是IE6不支持fixed,所以今天分享一个兼容IE6的页面底部固定层CSS代码.如下 ...

  10. log4j 1.2配置(转载)

    转载自:http://www.blogjava.net/kit-soft/archive/2009/08/28/292977.html 第一步:加入log4j-1.2.8.jar到lib下. 第二步: ...