POJ 1321:棋盘问题
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 21666 | Accepted: 10765 |
Description
Input
每组数据的第一行是两个正整数,n k。用一个空格隔开,表示了将在一个n*n的矩阵内描写叙述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描写叙述了棋盘的形状:每行有n个字符。当中 # 表示棋盘区域。 . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
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:棋盘问题的更多相关文章
- POJ 1321 棋盘问题 --- DFS
POJ 1321 题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子. (注意 .不可放 #可放) 解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标 ...
- DFS POJ 1321 棋盘问题
题目传送门 /* DFS:因为一行或一列都只放一个,可以枚举从哪一行开始放,DFS放棋子,同一列只能有一个 */ #include <cstdio> #include <algori ...
- POJ 1321 棋盘问题(C)回溯
Emmm,我又来 POJ 了,这题感觉比上次做的简单点.类似皇后问题.但是稍微做了一点变形,比如棋子数量是不定的.棋盘形状不在是方形等等. 题目链接:POJ 1321 棋盘问题 解题思路 基本思路:从 ...
- OpenJudge/Poj 1321 棋盘问题
1.链接地址: http://bailian.openjudge.cn/practice/1321 http://poj.org/problem?id=1321 2.题目: 棋盘问题 Time Lim ...
- POJ 1321 棋盘问题(DFS板子题,简单搜索练习)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44012 Accepted: 21375 Descriptio ...
- POJ 1321 - 棋盘问题 - [经典DFS]
题目链接:http://poj.org/problem?id=1321 Time Limit: 1000MS Memory Limit: 10000K Description 在一个给定形状的棋盘(形 ...
- poj 1321 棋盘问题 递归运算
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19935 Accepted: 9933 Description ...
- poj 1321 棋盘问题 简单DFS
题目链接:http://poj.org/problem?id=1321 很久没有敲搜索了啊,今天敲了个水题练练手,哈哈.... 题目大意: 就是求在n*n的方格上放置k个棋子的方案数 代码: #inc ...
- POJ 1321 棋盘问题(状态压缩DP)
不总结的话, 同一个地方会 WA 到死 思路: 状态压缩 DP. 1. s 表示压缩状态, 若第 i 列放了棋子, 那么该列置 1, 否则该列置 0. 假如 s = 3(0x011) 那么表示棋盘的第 ...
- POJ 1321 棋盘问题 dfs 难度:0
http://poj.org/problem?id=1321 注意是在'#'的地方放棋子 矩阵大小不过8*8,即使是8!的时间复杂度也足以承受,可以直接dfs求解 dfs时标注当前点的行和列已被访问, ...
随机推荐
- ipad2 wifi ios7.x 1.0.1还是无法越狱
原话: Warning! We have reports that the iPad 2 (wifi) is not yet compatible with the jailbreak and wil ...
- JSON数据转换成table表格
<%@ page contentType="text/html; charset=UTF-8" %> <%@taglib uri="/struts-ta ...
- Python验证码识别处理实例
一.准备工作与代码实例 1.PIL.pytesser.tesseract (1)安装PIL:下载地址:http://www.pythonware.com/products/pil/(CSDN下载) 下 ...
- html input type=date 赋值问题 必须yyyy-mm-dd格式
type=date ,日期类型默认格式是yyyy-mm-dd 因此必须给该控件赋值yyyy-mm-dd格式的数据 错误的赋值 <input type="date" id=&q ...
- scala lambda 小括号与大括号
看akka源码的时候看到这样的一个用法: 作为接触scala两天半的我有些看不明白了.好一番搜索看到这样的答案: <scala雾中风景(2): 小括号与花括号> 下面的问题,表面上看是小括 ...
- nGrinder二次开发之监控机器性能数据
转载:https://blog.csdn.net/neven7/article/details/53909256 1.背景 做性能测试时,统计性能数据分为被压系统的数据和被压系统所在机器的数据,被压系 ...
- 【ichartjs】爬取理想论坛前30页帖子获得每个子贴的发帖时间,总计83767条数据进行统计,生成统计图表
统计数据如下: {': 2451} 图形化后效果如下: 源码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E ...
- GameCenter 使用指南
原地址:http://www.cocoachina.com/gamedev/misc/2010/1022/2229.html GameCenter 为单机游戏为主的 iPhone 游戏平台引入了社会化 ...
- vue echarts vue-echarts组件使用
1.git地址 https://github.com/ecomfe/vue-echarts 2.使用 (1)安装 npm install vue-echarts --save-dev (2)引入 im ...
- storm源码阅读笔记之任务调度算法
3种Scheduler概述 EventScheduler:将系统中的可用资源均匀地分配给需要资源的topology,其实也不是绝对均匀,后续会详细说明 DefaultScheduler:和Evenet ...