本题传动门

本题知识点:深度优先搜索 + 枚举 + 回溯

题意是要求我们把棋子放在棋盘的'#'上,但不能把两枚棋子放在同一列或者同一行上,问摆好这k枚棋子有多少种情况。

我们可以一行一行地找,当在某一行上找到一个可放入的'#'后,就开始找下一行的'#',如果下一行没有,就再从下一行找。这样记录哪个'#'已放棋子就更简单了,只需要记录一列上就可以了。

数据很小。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int n, k, ans;
char chess[10][10];
bool take[10]; // 判断该列上是否已放棋子 void dfs(int h, int t){
if(t == k){
ans++;
return ;
} if(h == n) return ; // 超出最后一行要返回 for(int i = h; i < n; i++){ // 对第h行以下的搜索
for(int j = 0; j < n; j++){
if(chess[i][j] == '#' && !take[j]){
take[j] = true;
dfs(i + 1, t + 1);
take[j] = false; // 回溯
}
}
}
} int main()
{
while(~scanf("%d %d", &n, &k) && n != -1 && k != -1){
for(int i = 0; i < n; i++)
scanf("%s", chess[i]); memset(take, false, sizeof(false));
ans = 0;
dfs(0, 0); printf("%d\n", ans);
}
return 0;
}

【POJ1321】棋盘问题的更多相关文章

  1. poj1321 棋盘问题(DFS)

    题目链接 http://poj.org/problem?id=1321 题意 给定一块棋盘(棋盘可能是不规则的),有k个相同棋子,将k个棋子摆放在棋盘上,使得任意两个棋子不同行,不同列,求有多少种不同 ...

  2. POJ1321棋盘问题

    http://poj.org/problem?id=1321 题意 : 我能说这是迄今为止见到的POJ上第二道中文题吗,既然是中文也很好理解,就不详述了 思路 : 典型的深搜DFS ; #includ ...

  3. POJ1321 棋盘问题(简单搜索)

    题意: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放 ...

  4. POJ-1321.棋盘问题.(回溯)

    做完题之后看了网上的一些题解但是发现他们的解释大部分都是错误的,所以就自己写了一下,笔者能力也有限,有错误之处大家多多指正. 第一次看题的时候以为就是简单的八皇后,但是写了之后发现存在很多问题,比如需 ...

  5. poj1321 棋盘问题(深搜dfs)

    转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1321">http://poj.org/prob ...

  6. 解题报告:poj1321 棋盘问题 - 搜索

    棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 51262 Accepted: 24785 Description 在一 ...

  7. DFS(3)——poj1321棋盘问题

    一.题目回顾 题目链接:棋盘问题 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于 ...

  8. POJ1321 棋盘问题 —— DFS回溯

    题目链接:http://poj.org/problem?id=1321 棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  9. poj1321棋盘问题(dfs+摆放问题)

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...

  10. POJ1321棋盘问题(暴搜)

    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. ...

随机推荐

  1. MVC中根据后台绝对路径读取图片并显示在IMG中

    数据库存取图片并在MVC3中显示在View中 根据路径读取图片: byte[] img = System.IO.File.ReadAllBytes(@"d:\xxxx.jpg"); ...

  2. 执行kubectl create-f replicaset.yaml后k8s是如何工作的

    参考:提高 kubectl 使用生产力[译] 英文原文:https://learnk8s.io/blog/kubectl-productivity/ Kubernetes 架构 Kubernetes ...

  3. 2019 朗玛信息java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.朗玛信息等公司offer,岗位是Java后端开发,最终选择去了朗玛信息. 面试了很多家公司,感觉大部分公司考察的点 ...

  4. C++ Primer Plus(第6版)习题(第二章)

    1..编写一个C++程序,它显示您的姓名和地址. #include<iostream> using namespace std; int main() { string name,addr ...

  5. Linux中打开文件显示行号相关命令

    一.显示行号 :set number 或 :set nu 二.取消显示行号 :set nu! 三.每次打开显示行号 修改vi ~/.vimrc 文件,添加:set number

  6. PHP防止SQL注入攻击和XSS攻击

    代码如下: /** * 防SQL注入和XSS攻击 * @param $arr */ function SafeFilter (&$arr) { $ra=Array('/([\x00-\x08, ...

  7. Pytorch 张量维度

    Tensor类的成员函数dim()可以返回张量的维度,shape属性与成员函数size()返回张量的具体维度分量,如下代码定义了一个两行三列的张量: f = torch.randn(2, 3) pri ...

  8. gitlab中clone项目时,IP地址是一串数字

    问题:docker安装后,clone显示ip是一串地址 解决(如果是非docker启动的,自然就是进入gitlab下): 1.进入docker 后台: docker exec -it gitlab / ...

  9. Linux--重要文件

    目录 /etc/resolv.conf /etc/host /etc/sysconfig/network /etc/fstab /etc/rc.local /etc/profile /etc/bash ...

  10. win下maridb 10.1.8下主从复制配置

    主库配置 server_id=1read-only=0replicate-do-db=mydatalog-bin=mysql-bin 主库权限设置 GRANT replication slave ON ...