棋盘问题——POJ1321
棋盘问题——深度优先搜索
题目描述:
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
详情请看poj1321: https://vjudge.net/problem/POJ-1321#author=0
解题思路:
按行进行深搜,总的方案数 = 选取该行中某位置的方案数 + 不选取该行位置的方案数,直至棋子数位0或达到最后一行
代码如下:
#include<stdio.h>
#include<iostream>
using namespace std;
int ans = ;
char map[][];
int result[];
int n, k; /********************检查是否冲突*****************/
int Check(int row,int col)
{
int flag = ;
if (row == )
return flag;
for (int i = ; i < row; i++)
{
if (result[i] == col)
flag = ;
}
return flag;
} /*************按行搜索,从第row行开始,放k个的方法数*******/
void Dfs(int row,int k)
{
if (row == n || k == ) //要开考虑到row == n 且 k == 0的情况
{
if (k == )
ans++;
return;
}
for (int col = ; col < n; col++)
{
if (map[row][col] == '#' && Check(row, col))
{
result[row] = col;
Dfs(row + , k-);
}
}
Dfs(row + , k);
return;
}
int main()
{
memset(result, -, sizeof(result));
memset(map, -, sizeof(map));
while (cin>>n>>k && (n != - && k != -))
{
for (int i = ; i < n; i++)
{
for (int j = ; j < n; j++)
{
//scanf("%c", &map[i][j]); //我也不知道为什么不能用scanf,希望大佬看到了能解释一下
cin >> map[i][j];
}
}
Dfs(,k);
cout << ans<<endl;
ans = ; //记得归零
}
return ;
}
我也是刚接触的小白,什么不懂的,希望大家能在下面一起讨论
棋盘问题——POJ1321的更多相关文章
- 棋盘问题---poj1321(dfs)
http://poj.org/problem?id=1321 由于搜索是原来写的,而集训的时候没来所以只能现在补补咯-_- 简单的深搜 #include<stdio.h> #include ...
- DFS例题
特殊的质数肋骨(递归)] -题目描述-农民约翰的母牛总是生产出最好的肋骨.你能通过农民约翰和美国农业部标记在每根肋骨上的数字认出它们. 农民约翰确定他卖给买方的是真正的质数肋骨,是因为从右边开始切下肋 ...
- dfs/bfs专项训练
A.棋盘问题——poj1321 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放 ...
- poj1321 棋盘问题(DFS)
题目链接 http://poj.org/problem?id=1321 题意 给定一块棋盘(棋盘可能是不规则的),有k个相同棋子,将k个棋子摆放在棋盘上,使得任意两个棋子不同行,不同列,求有多少种不同 ...
- POJ1321棋盘问题
http://poj.org/problem?id=1321 题意 : 我能说这是迄今为止见到的POJ上第二道中文题吗,既然是中文也很好理解,就不详述了 思路 : 典型的深搜DFS ; #includ ...
- POJ1321 棋盘问题(简单搜索)
题意: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放 ...
- POJ-1321.棋盘问题.(回溯)
做完题之后看了网上的一些题解但是发现他们的解释大部分都是错误的,所以就自己写了一下,笔者能力也有限,有错误之处大家多多指正. 第一次看题的时候以为就是简单的八皇后,但是写了之后发现存在很多问题,比如需 ...
- poj1321 棋盘问题(深搜dfs)
转载请注明出处:http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1321">http://poj.org/prob ...
- 解题报告:poj1321 棋盘问题 - 搜索
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 51262 Accepted: 24785 Description 在一 ...
随机推荐
- 2018上海大都会 J-Beautiful Numbers(数位dp-模未知)
J-Beautiful Numbers 链接:https://www.nowcoder.com/acm/contest/163/J 来源:牛客网 时间限制:C/C++ 8秒,其他语言16秒 空间限制: ...
- List Control控件中及时捕获checkbox被选中的消息的解决方案
转自:http://blog.csdn.net/vycode/article/details/7345073 我的功能需求是:用户可以在List Control里添加item,当无选项被选中(即Che ...
- 2014-10-5 NOIP模拟赛
祖孙询问 (tree.pas/c/cpp) [问题描述] 已知一棵n个节点的有根树.有m个询问.每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系. [输入格式] 输入第一行包括一个整数n表示节 ...
- AcEdCommandStack 输出所有命令
; AcEdCommandIterator* iter = nullptr; for (iter = acedRegCmds->iterator(); !iter->done(); ite ...
- 多媒体文件嵌入HTML中自动转码工具
神器网址:https://iframely.com/embed 首先上传视频文件到服务器,视频管理网址平台 比如: https://wistia.com/ 然后进入到 iframely 网址.复制 ...
- LDAP第三天 MySQL+LDAP 安装
https://www.easysoft.com/applications/openldap/back-sql-odbc.html OpenLDAP 使用 SQLServer 和 Oracl ...
- 牛客小白月赛13 G(双向搜索)
AC通道 两边同步搜,一步里面A走一次B走两次,遇到对方走过的地方就得到了答案. #include <bits/stdc++.h> using namespace std; const i ...
- A Simple Math Problem (矩阵快速幂)
Lele now is thinking about a simple function f(x). If x < 10 f(x) = x. If x >= 10 f(x) = a0 ...
- Sonya and Matrix Beauty Codeforces - 1080E
https://codeforces.com/contest/1080/problem/E 比赛时候一个多小时码不出来... 来看遇到的困难: 1.没有能用的随机unsignedlonglong函数 ...
- 企业级Web Nginx 服务优化
企业级Web Nginx 服务优化 http://blog.51cto.com/search/result?q=%E4%BC%81%E4%B8%9A%E7%BA%A7Web+Nginx+%E6%9C% ...