poj 1321 排兵布阵问题 dfs算法
题意:有不规则地图,在上面放n个相同的棋子,要求摆放的时候不同行不同列。问:有多少种摆法?
思路:dfs+回溯
- 用一个book[]数组来表示当前列是否有放棋子
- 一行一行的遍历,对一行来说遍历它的列,如果满足book[i] == 0 && map[cur][i] == '#' 则可以摆放,然后继续遍历下一行
代码上需要注意的地方:
for (int i = ; i<n; i++)
if (book[i] == && map[cur][i] == '#')
{
book[i] = ;
m++;
dfs(cur + );
book[i] = ;
m--;
}
其中有个回溯的操作,为什么?
因为如果当前没有执行dfs(cur+1)这个语句的话,说明i这个位置不能摆放棋子,或者说摆放棋子不妥。所以需要往回标记
解决问题的代码:
#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
char map[][];
int n, k;
int total, m;
int book[];
void dfs(int cur)
{
if (k == m)
{
total++;
return;
}
if (cur >= n)
return;
for (int i = ; i<n; i++)
if (book[i] == && map[cur][i] == '#')
{
book[i] = ;
m++;
dfs(cur + );
book[i] = ;
m--;
}
dfs(cur + );
}
int main()
{
while (scanf("%d%d", &n, &k) != EOF)
{
if (n == - && k == -)
break;
for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
cin >> map[i][j];
dfs();
printf("%d\n", total);
m = total = ;
}
return ;
}
poj 1321 排兵布阵问题 dfs算法的更多相关文章
- hdu4539 郑厂长系列故事——排兵布阵 + POJ1158 炮兵阵地
题意: 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32 ...
- HDU 4539郑厂长系列故事――排兵布阵(状压DP)
HDU 4539 郑厂长系列故事――排兵布阵 基础的状压DP,首先记录先每一行可取的所哟状态(一行里互不冲突的大概160个状态), 直接套了一个4重循环居然没超时我就呵呵了 //#pragma co ...
- HDU 4539 郑厂长系列故事——排兵布阵
http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) ...
- 郑厂长系列故事——排兵布阵 hdu4539(状态压缩DP)
郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- [BJOI2019]排兵布阵——分组背包
题目链接: [BJOI2019]排兵布阵 对于每座堡垒,将$s$个对手排序,显然如果安排的兵力能打败第$i$个对手就一定能打败前$i-1$个. 那么对于第$i$座城堡,可以看做有$s+1$个物品(可以 ...
- [BJOI2019]排兵布阵(动态规划)
[BJOI2019]排兵布阵(动态规划) 题面 洛谷 题解 暴力dp: 设\(f[i][j]\)表示考虑到了第\(i\)座城市用了\(j\)人的最大收益,枚举在这个城市用多少人就可以了. 优化: 发现 ...
- HDU-4539郑厂长系列故事——排兵布阵(状态压缩,动态规划)
郑厂长系列故事--排兵布阵 Time Limit : 10000/5000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total ...
- HDU 4539 郑厂长系列故事——排兵布阵 状压dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事--排兵布阵 Time Limit: 10000/5000 MS (Java/O ...
- HDU 4539 郑厂长系列故事——排兵布阵 —— 状压DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 郑厂长系列故事——排兵布阵 Time Limit: 10000/5000 MS (Java/Ot ...
随机推荐
- Redis的数据类型(lists、Sets)
lists类型 Redis 列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边) LPUSH 命令插入一个新的元素到头部, 而 RPUSH 插入一个新元素导 ...
- Json 后台转对象的方式或者获取属性值方式。
类似这类的 json字符串 后台转成 model 或者取其中一个属性值. 需要去掉前后引号 以及将转义字符去掉.空格代替 resoult = resoult.Substring(0, resoult. ...
- 初学Vue.js(2.x版本)
首先肯定是打开官网查看文档了,没想到我太高估了自己,看的我头晕也不知道到底说了个啥.没办法,只能另寻他法,好在有菜鸟教程.然而我还是想多了,不稀饭一点点看下去,只想快点明白它到底说了个啥.嗯,找来找去 ...
- Oracle创建用户、表(1)
Oracle创建用户.表(1) 1. 连接 C:\Users\LEI>sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on ...
- virtualapk爬坑心得
1.宿主和插件的工程build.gradle必须是 com.android.tools.build:gradle:2.1.3 gradle-wrapper 必须是 gradle-2.14.1-all ...
- 对卷积(convolution)的理解
参考文章 https://www.jianshu.com/p/daaaeb718aed https://blog.csdn.net/bitcarmanlee/article/details/54729 ...
- 转载《五大免费采集器哪个好,火车头,海纳,ET,三人行,狂人采集 》
在目前的站长圈内,比较流行的采集工具有很多,但是总结起来,比较出名的免费的就这么几个:火车头,海纳,ET,三人行,狂人. 下面我们对这几款采集工具作一个简单的评比. 1.火车头 基本上人人都知道,那就 ...
- MovieReview—Coco(寻梦环游记)
Dream & Family The protagonist in the movie is hard to choose between family and dream. ...
- Unity四元素运用之风向标跟随箭头
using System.Collections; using System.Collections.Generic; using UnityEngine; public class WindVane ...
- 【UML】协作图Collaboration diagram(交互图)(转)
http://blog.csdn.net/sds15732622190/article/details/49402269 前言 学完UML时序图,就要看一下UML协作图,因为两张图是相 ...