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 ...
随机推荐
- Mirror--使用证书配置镜像模板
--==================================================================--该文档主要用于内部配置模板--场景:--主服务器:192.1 ...
- centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课
centos HA高可用集群 heartbeat搭建 heartbeat测试 主上停止heartbeat服务 测试脑裂 两边都禁用ping仲裁 第三十二节课 heartbeat是Linu ...
- 通过生成器yield实现单线程的情况下实现并发运算效果(异步IO的雏形)
一.协程: 1.生成器只有在调用时才会生成相应的数据 2.调用方式有 " str__next__.() str.send() ", 3.并且每调用一次就产生一个值调用到最后一个 ...
- 内存记号(Memory Trail)[自定义的名字] --调试方法
即使你把输出导向到文件中,运转记录花费的时间所带来的冲击,仍然足够改变程序的执行结果.如果要改善这种情况,我必须回到一个我所谓的“Memory Trails”(内存记号)的低阶技术中.为了使用 mem ...
- devise 自定义手机号登录
user model中配置 validates_uniqueness_of :phone def email_required? false end 修改user migration文件,给phone ...
- HDU - 2844 Coins(多重背包+完全背包)
题意 给n个币的价值和其数量,问能组合成\(1-m\)中多少个不同的值. 分析 对\(c[i]*a[i]>=m\)的币,相当于完全背包:\(c[i]*a[i]<m\)的币则是多重背包,考虑 ...
- Java开发之JDK配置
windows下配置JDK环境变量: 1.安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为D:/java/jdk1.5.0_08: 2.安装完成后,右击“我的电 ...
- Vue学习笔记之Vue的对象单体模式
0x00 对象的单体模式 为了解决箭头函数this指向的问题 推出来一种写法 对象的单体模式 var person = { name:'小马哥', age:12, fav(){ console.log ...
- sqlmap简单使用方法
sqlmap使用 注入点 http://1xx.xxx.xxx.xxxx/dvwa/vulnerabilities/sqli/index.php?id=1&Submit=Submit# 通 ...
- 如何解决tensorflow报:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
答:使能AVX,AVX2和FMA来进行源码编译,这样可以提速噢 具体编译方法,请参考windows10下如何进行源码编译安装tensorflow