博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1321 棋盘问题(DFS)
阅读量:5295 次
发布时间:2019-06-14

本文共 1082 字,大约阅读时间需要 3 分钟。

Description

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

21
 
#include 
#include
using namespace std;int n,k,visc[10],ans;char map[10][10];void DFS(int row,int deep){    if(deep>k)    {        ans++;        return;    }    for(int i=row;i<=n;i++)        for(int j=1;j<=n;j++)         if(map[i][j]=='#'&&visc[j]==0)         {             visc[j]=1;             DFS(i+1,deep+1);             visc[j]=0;         }}int main(){    while(cin>>n>>k)    {        if(n==-1&&k==-1)break;        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)            cin>>map[i][j];        memset(visc,0,sizeof(visc));        ans=0;        DFS(1,1);        cout<
<
 
 

转载于:https://www.cnblogs.com/MisdomTianYa/p/6581720.html

你可能感兴趣的文章
sdut_1189
查看>>
归并排序
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
走遍美国 —— 各州及其别名
查看>>
国内外免费电子书(数学、算法、图像、深度学习、机器学习)
查看>>
狄利克雷过程(Dirichlet Process)
查看>>
五子棋项目的实现(二)博弈树算法的描述
查看>>
Hibernate : Disabling contextual LOB creation as createClob() method threw error
查看>>
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>
thinkphp 防sql注入
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>
c++回调函数
查看>>
linux下Rtree的安装
查看>>
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】
查看>>