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

Input

输入含有多组测试数据。 
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n 
当为-1 -1时表示输入结束。 
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。

Output

对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。

Sample Input

2 1
#.
.#
4 4
...#
..#.
.#..
#...
-1 -1

Sample Output

2
1

这个题就是一个简化版的N皇后问题,问的是有哪些情况,所以深搜,题意是说给你N*N的棋盘,有的的地方能放,而且不能在一条水平线和竖直线上。

#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
#include<cmath>
#include<vector>
#include<map>
#include<stack>
#include<bitset>
#include<cstring>
#define Swap(a,b) a^=b^=a^=b
#define cini(n) scanf("%d",&n)
#define cinl(n) scanf("%lld",&n)
#define cinc(n) scanf("%c",&n)
#define coui(n) printf("%d",n)
#define couc(n) printf("%c",n)
#define coul(n) printf("%lld",n)
#define speed ios_base::sync_with_stdio(0);//Çв»¿ÉÓÃscnaf£»
#define Max(a,b) a>b?a:b
#define Min(a,b) a<b?a:b
using namespace std;
typedef long long ll;
const int N = 10;
int n,k;
int flag[N];
char a[N][N];
queue<int>q;
int cnt,ans;
void dfs(int x)
{if(x==n+1) return ;for(int i=1;i<=n;i++){if(a[x][i-1]=='#'&&flag[i]==0){flag[i]=1;cnt++;if(cnt==k) ans++;dfs(x+1);cnt--;flag[i]=0;}}dfs(x+1);
}int main()
{while(cin>>n>>k){cnt=0;ans=0;if(n==-1||k==-1)break;for(int i=1;i<=n;i++){cin>>a[i];}/* for(int i=1;i<=m;i++){for(int j=1;j<=m;j++){cout<<a[i][j]<<' ';}cout<<endl;}*/dfs(1);cout<<ans<<endl;}}

POJ - 1321 棋盘问题相关推荐

  1. POJ 1321 棋盘问题(回溯)

    文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. 代码 2.1 Accepted 代码 1. 题目 1.1 题目链接 http://poj.org/problem?id ...

  2. poj 1321 棋盘问题(dfs)

    题目:http://poj.org/problem?id=1321 没什么难度,比较水... View Code 1 #include <iostream> 2 #include<c ...

  3. POJ 1321 棋盘问题【DFS】

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 35493   Accepted: 17485 Descriptio ...

  4. POJ 1321 棋盘问题 搜索

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

  5. POJ 1321 棋盘问题 题解

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

  6. 深度优先搜索----poj 1321棋盘问题

    题目描述 棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63237   Accepted: 30234 Descr ...

  7. POJ 1321 棋盘问题(DFS 状压DP)

    用DFS写当然很简单了,8!的复杂度,16MS搞定. 在Discuss里看到有同学用状态压缩DP来写,就学习了一下,果然很精妙呀. 状态转移分两种,当前行不加棋子,和加棋子.dp[i][j]中,i代表 ...

  8. A - 棋盘问题 POJ - 1321(dfs)

    A - 棋盘问题 POJ - 1321 dfs 复杂度计算: dfs共进行a步,每步需要循环n次,复杂度为 a^n次方 首先是暴力 an*n,果然炸了 #include<cstdio> # ...

  9. 棋盘问题 POJ - 1321

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

最新文章

  1. 项目中的textarea遇到的小问题
  2. Hive(四)——数据操作
  3. 推荐三款U盘烧写工具
  4. 超级玛丽java版下载jar文件_java超级玛丽混搭版jar
  5. 新浪邮箱服务器密码被盗,邮箱密码盗取严重的注意事项以及处理建议
  6. chia币新协议矿池搭建教程
  7. PrinTao CANON Home Studio Edition 8.0r12 17 Mac 佳能专业打印软件
  8. 华为OD机试题:黑板上的数涂颜色
  9. 中国“千禧一代”是一群什么样的消费者?
  10. CSDN文章如何迁移至微信公众号
  11. MuleSoft知识总结-11.Mule基本组件(Transform Message)
  12. 怎么理解CRM客户关系管理系统?
  13. 辣椒籽的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  14. 静态HTML网页设计作品——棋牌游戏(8页) HTML+CSS+JavaScript web大作业 静态网页
  15. Monkey 简介操作
  16. 网上商城电子购物网站
  17. s 标签 遍历 list 数组
  18. super与 this
  19. html点击图片产生事件,javascript里怎么实现点击图片弹出对话框?
  20. 小米路由器3G刷固件Padavan_小米路由器3G刷Breed

热门文章

  1. Android开发之百度地图定位以及简单覆盖物的实现
  2. 计算a b python_你知道Python中a = b和a = a b的结果是不一样的吗?
  3. mkfs -t ext3 错误/dev/sdxx is apparently in use by the system; 解决方法
  4. easyui combobox默认选中项
  5. unit 10计算机英语教程,计算机英语实用教程Unit 10.doc
  6. 利用MATLAB进行系统时域分析,实验二 利用matlab进行系统的时域分析
  7. oracle处理回车换行符
  8. textarea 通过 json在各浏览器的显示回车换行的问题
  9. Adobe AIR for html/js人员
  10. js 递归编程要注意的:return