棋盘问题——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 在一 ...
随机推荐
- L2-014. 列车调度 (DP)
火车站的列车调度铁轨的结构如下图所示. Figure 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道进入,最后从出口 ...
- HTML5学习笔记(二)新元素和功能
<canvas> 新元素(必须使用脚本来绘制图形) 标签 描述 <canvas> 标签定义图形,比如图表和其他图像.该标签基于 JavaScript 的绘图 API HTML5 ...
- 【Java】NIO中Channel的注册源码分析
Channel的注册是在SelectableChannel中定义的: public abstract SelectionKey register(Selector sel, int ops, Obje ...
- python集合介绍
set原理 Python 还 包 含 了 一 个 数 据 类 型—— set ( 集 合 ) . 集 合 是 一 个 无 序 不 重 复 元素 的 集 . 基 本 功 能 包 括 关 系 测 试 和 ...
- __stdcall
__stdcall是函数调用约定的一种,函数调用约定主要约束了两件事: 1.参数传递顺序 2.调用堆栈由谁(调用函数或被调用函数)清理 常见的函数调用约定:stdcall cdecl fastcall ...
- CF1088F Ehab and a weird weight formula【倍增】
首先把点权归到边上,设点权较小的一个点是v,也就是(u,v)的边权是log2(dis(u,v))*a[v]+a[v]+a[u] 然后还有一个性质就是这棵树按点权最小点提起来就是一个堆 暴力是n^2的M ...
- 洛谷U3348 A2-回文数
U3348 A2-回文数 题目背景 方方方很喜欢回文数,于是就有了一道关于回文数的题目. 题目描述 求从小到大第n(1<=n<=10^18)个回文数. 注释:出题人认为回文数不包括0. 输 ...
- 5.格式化输出f
16.1 不区分大小写 num = input('>>>') s = F'python{num}' print(s) 16.2 可以加入表达式 s1='alex' s2=f'我的名字 ...
- maven - 初识
一.Maven是什么? Maven官网的描述:Apache Maven is a software project management and comprehension tool. Based o ...
- vue中的导航守卫
官方文档地址: 导航守卫:https://router.vuejs.org/zh-cn/advanced/navigation-guards.html 好的,重点内容 router.beforeEac ...