棋盘问题
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 21666   Accepted: 10765

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

2
1

深搜。

注意k<n的处理。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream> using namespace std; int n , k;
int chess[10][10];
int vist[10];
int ans; void dfs(int x, int num)
{
if(num==k)
{
ans++;
return ;
}
if(x>n)
return ;
for(int i=1; i<=n; i++)
{
if(chess[x][i]==1 && vist[i]==0)
{
vist[i]=1;
dfs(x+1, num+1);
vist[i]=0; //回溯后还原数据
}
}
dfs(x+1, num);
} int main()
{
char str;
while(scanf("%d%d", &n, &k)!=EOF)
{
memset(chess, 0, sizeof(chess));
memset(vist, 0, sizeof(vist));
ans=0;
if(n==-1 && k==-1)
break;
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
cin>>str;
if(str=='#')
chess[i][j]=1;
}
dfs(1, 0);
cout<<ans<<endl;
} return 0;
}

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream> using namespace std; #define max 100 char map[max][max];
int s[max];
int n,k,i,j,a; void dfs(int x,int y) //函数參量表示的意思:x表示该棋盘的第x行,y表示放置第y个棋子
{
int i,j;
if(y==k) // 递归边界
a++;
else
{
for(i=x+1;i<=n;i++) // 按行讨论
{
for(j=1;j<=n;j++) // 从1 到 n列
{
if( map[i][j]=='#' && !s[j] ) // 若该点是 '#'且该点的这一列没有旗子。则能够在该位置放棋子。 {
s[j]=1;
dfs(i,y+1);
s[j]=0;
}
}
}
}
} int main ()
{ while (~scanf("%d%d",&n,&k)&&n!=-1&&k!=-1)
{
a=0;
memset(s,0,sizeof(s));
getchar(); //
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
scanf("%c",&map[i][j]);
getchar(); //
}
dfs(0,0);
printf("%d\n",a);
}
return 0;
}

POJ 1321:棋盘问题的更多相关文章

  1. POJ 1321 棋盘问题 --- DFS

    POJ 1321 题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子. (注意 .不可放 #可放) 解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标 ...

  2. DFS POJ 1321 棋盘问题

    题目传送门 /* DFS:因为一行或一列都只放一个,可以枚举从哪一行开始放,DFS放棋子,同一列只能有一个 */ #include <cstdio> #include <algori ...

  3. POJ 1321 棋盘问题(C)回溯

    Emmm,我又来 POJ 了,这题感觉比上次做的简单点.类似皇后问题.但是稍微做了一点变形,比如棋子数量是不定的.棋盘形状不在是方形等等. 题目链接:POJ 1321 棋盘问题 解题思路 基本思路:从 ...

  4. OpenJudge/Poj 1321 棋盘问题

    1.链接地址: http://bailian.openjudge.cn/practice/1321 http://poj.org/problem?id=1321 2.题目: 棋盘问题 Time Lim ...

  5. POJ 1321 棋盘问题(DFS板子题,简单搜索练习)

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

  6. POJ 1321 - 棋盘问题 - [经典DFS]

    题目链接:http://poj.org/problem?id=1321 Time Limit: 1000MS Memory Limit: 10000K Description 在一个给定形状的棋盘(形 ...

  7. poj 1321 棋盘问题 递归运算

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19935   Accepted: 9933 Description ...

  8. poj 1321 棋盘问题 简单DFS

    题目链接:http://poj.org/problem?id=1321 很久没有敲搜索了啊,今天敲了个水题练练手,哈哈.... 题目大意: 就是求在n*n的方格上放置k个棋子的方案数 代码: #inc ...

  9. POJ 1321 棋盘问题(状态压缩DP)

    不总结的话, 同一个地方会 WA 到死 思路: 状态压缩 DP. 1. s 表示压缩状态, 若第 i 列放了棋子, 那么该列置 1, 否则该列置 0. 假如 s = 3(0x011) 那么表示棋盘的第 ...

  10. POJ 1321 棋盘问题 dfs 难度:0

    http://poj.org/problem?id=1321 注意是在'#'的地方放棋子 矩阵大小不过8*8,即使是8!的时间复杂度也足以承受,可以直接dfs求解 dfs时标注当前点的行和列已被访问, ...

随机推荐

  1. xcode 8 重新支持插件

    苹果出了Xcode8之后,就加了签名让之前的自定义插件无法继续的安装使用.想要重新使用插件的话只要用自己的签名覆盖苹果的签名即可. 1.创建自签名证书 钥匙串->钥匙串访问->证书助理-& ...

  2. LeetCode128:Longest Consecutive Sequence

    题目: Given an unsorted array of integers, find the length of the longest consecutive elements sequenc ...

  3. Oracle 字符集的查看和修改 -转

    一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...

  4. CentOS7.3虚拟机双网卡配置

    笔者在学习和工作中经常要用到linux,专门装一个linux主机固然可以,但是毕竟还要用到windows,解决的办法就是用vmware来搭建linux虚拟机.关于linux虚拟机上网的问题,笔者写过很 ...

  5. 201521123122 《java程序设计》 第三周学习总结

    1. 本章学习总结 你对于本章知识的学习总结 链接点击此处 2. 书面作业 代码阅读 public class Test1 { private int i = 1;//这行不能修改 private s ...

  6. Windows10 永久激活查询/激活时间查询/激活查询命令/激活码查询

    1.使用 Windows + R组合快捷键打开运行命令框 运行: slmgr.vbs -dlv       命令 可以查询到Win10的激活信息,包括:激活ID.安装ID.激活截止日期等信息.看不懂的 ...

  7. (转)解决 TortoiseGit 诡异的 Bad file number 问题

    此问题,请不要使用 rebase, 下载最新的 TortoiseGit 即可: TortoiseGit-2.3中文版与Git安装包_手册: http://download.csdn.net/detai ...

  8. 修复恢复&quot;可疑&quot;的SQLServer数据库

    今天机房突然断电,DB连不上了,提示 无法打开数据库'MyDB'.恢复操作已将该数据库标记为 SUSPECT. 原因是断电导致DB文件损坏 通过SQL Server Management Studio ...

  9. SQL中Union和UnionAll的使用

    SQL中Union和UnionAll的使用 1.建立一个Student表 ,如下: 2.建立一个Teacher表,如下: 3.使用Union,将去重并组合表,效果: 4.使用Union All,不去重 ...

  10. python基础八---文件操作

    1.文件操作 XXXXX.txt 1.文件路径:d:\XXXXX.txt(绝对路径) 2.编码方式:utf-8 gbk 3.操作方式:只读.只写.追加.读写.写读.... 排错: 以什么编码方式储存的 ...