POJ 1321 棋盘问题 dfs 难度:0
http://poj.org/problem?id=1321
注意是在'#'的地方放棋子
矩阵大小不过8*8,即使是8!的时间复杂度也足以承受,可以直接dfs求解
dfs时标注当前点的行和列已被访问,接着搜索行列都未被访问的新点,注意搜索完毕之后标注当前点的行和列未被访问
#include <cstdio>
#include <cstring>
using namespace std;
int n,k;
char maz[8][9];
int e[8][8],len[8];
bool r[8],c[8];
void dye(int x,int y){
r[x]=c[y]=true;
}
void undye(int x,int y){
r[x]=c[y]=false;
}
int dfs(int s,int cnt){
if(cnt<=0)return 1;
int ans=0;
for(int i=s+1;cnt+i<=n;i++){
for(int j=0;j<len[i];j++){
if(r[i]||c[e[i][j]])continue;
dye(i,e[i][j]);
ans+=dfs(i,cnt-1);
undye(i,e[i][j]);
}
}
return ans;
}
int main(){
while(scanf("%d%d",&n,&k)==2&&n!=-1){
for(int i=0;i<n;i++)scanf("%s",maz[i]);
memset(len,0,sizeof(len));
memset(r,0,sizeof(r));
memset(c,0,sizeof(c));
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(maz[i][j]=='#'){
e[i][len[i]++]=j;
}
}
}
if(k==0){
puts("0");
continue;
}
int ans=0;
for(int i=0;k+i<=n;i++){
for(int j=0;j<len[i];j++){
dye(i,e[i][j]);
ans+=dfs(i,k-1);
undye(i,e[i][j]);
}
}
printf("%d\n",ans);
}
return 0;
}
POJ 1321 棋盘问题 dfs 难度:0的更多相关文章
- POJ 1321 棋盘问题 --- DFS
POJ 1321 题目大意:给定一棋盘,在其棋盘区域放置棋子,需保证每行每列都只有一颗棋子. (注意 .不可放 #可放) 解题思路:利用DFS,从第一行开始依次往下遍历,列是否已经放置棋子用一个数组标 ...
- POJ 1321 棋盘问题(DFS板子题,简单搜索练习)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44012 Accepted: 21375 Descriptio ...
- POJ 1321 棋盘问题 DFS 期末前水一水就好……
A - 棋盘问题 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- POJ 1321 棋盘问题 (DFS + 回溯)
题目链接:http://poj.org/problem?id=1321 题意:中文题目,就不多说了...... 思路: 解题方法挺多,刚开始想的是先从N行中选择出来含有“#”的K行,再在这K行中放置K ...
- POJ - 1321 棋盘问题 dfs分层搜索(n皇后变式)
棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 47960 Accepted: 23210 Descriptio ...
- POJ 1321 棋盘问题 DFS搜索
简单搜索 练习一下回溯 #include <iostream> #include <cstdio> #include <cstring> #include < ...
- DFS POJ 1321 棋盘问题
题目传送门 /* DFS:因为一行或一列都只放一个,可以枚举从哪一行开始放,DFS放棋子,同一列只能有一个 */ #include <cstdio> #include <algori ...
- POJ 1321 棋盘问题(C)回溯
Emmm,我又来 POJ 了,这题感觉比上次做的简单点.类似皇后问题.但是稍微做了一点变形,比如棋子数量是不定的.棋盘形状不在是方形等等. 题目链接:POJ 1321 棋盘问题 解题思路 基本思路:从 ...
- Poj 1321 棋盘问题 【回溯、类N皇后】
id=1321" target="_blank">棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Subm ...
随机推荐
- requests获取所有状态码
requests获取所有状态码 requests默认是不会获取301/302的状态码的.可以设置allow_redirects=False,这样就可以获取所有的状态码了 import requests ...
- grep命令做永久别名 显示颜色
grep命令做永久别名 显示颜色 http://jingyan.baidu.com/article/22fe7ced17c1543002617f9c.htmlhttp://blog.csdn.net ...
- (2)基本工作流(制作场景与UI)
1.认识cocos编辑器主界面. 2.制作新场景: 1)打开我们新建的HelloCocos项目,新建场景名称为“Scene”,如下图: 2)点击新建,场景就被创建出来了,如下图: 3) ...
- viewport 编写 iPhone Friendly 的 Web 应用程序
在了解到iPhone的一些常见布局法后,我们就可以开始着手编写一个真正能在iPhone上跑的页面了.小声说一句,之前我说要布局讨论完了,要进入交互逻辑开发,后来细心一想发现不行,有些东西不讲的话将会对 ...
- 2018 Multi-University Training Contest 2 Solution
A - Absolute 留坑. B - Counting Permutations 留坑. C - Cover 留坑. D - Game puts("Yes") #include ...
- LA 4287 有相图的强连通分量
大白书P322 , 一个有向图在添加至少的边使得整个图变成强连通图, 是计算整个图有a个点没有 入度, b 个点没有出度, 答案为 max(a,b) ; 至今不知所云.(求教) #include &l ...
- CV 两幅图像配准
http://www.cnblogs.com/Lemon-Li/p/3504717.html 图像配准算法一般可分为: 一.基于图像灰度统计特性配准算法:二.基于图像特征配准算法:三.基于图像理解的配 ...
- mysql日期和JDBC查询出来的结果相差8小时
数据库时间:2017-11-08 16:30:00 查询出来: 2017-11-09 00:30:00 问题:数据库时区,和JDBC连接时区设置问题. set global time_zone = ' ...
- 20145322何志威《网络对抗》Exp2 后门原理与实践
基础问题回答 1 例举你能想到的一个后门进入到你系统中的可能方式? 在网上下载盗版软件时捆绑的后门程序. 不小心进入钓鱼网站. 2 例举你知道的后门如何启动起来(win及linux)的方式? Wind ...
- 构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)
构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study ...