[ACM] POJ 3740 Easy Finding (DFS)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 16202 | Accepted: 4349 | 
Description
Input
M, N (M ≤ 16, N ≤ 300). The next M lines every line contains
N integers separated by space.
Output
Sample Input
3 3
0 1 0
0 0 1
1 0 0
4 4
0 0 0 1
1 0 0 0
1 1 0 1
0 1 0 0
Sample Output
Yes, I found it
It is impossible
Source
题意为:
给定由01构成的矩阵,问能不能选出几行构成新矩阵,使得新矩阵每列有且仅仅有一个1.
枚举全部行,行号递增,推断每行能否够选(是否与前面所选的行发生冲突)。当前行可选时。第j列假设为1。则用vis[j]=1标记,当行号>n(行数)时。推断每列是否都有1.
#include <iostream>
#include <stdio.h>
#include <string.h>
const int maxn=18;
const int maxm=310;
int mp[maxn][maxm];
bool vis[maxm];
int n,m;
bool yes;
using namespace std; bool row_ok(int rth)//rth为行号,推断第rth行能够选
{
for(int j=1;j<=m;++j)
if(vis[j]&&mp[rth][j])//第j列已经有1了
return false;
for(int j=1;j<=m;++j)//能够选
if(mp[rth][j])
vis[j]=true;
return true;
} bool judge()//当选的行号大于n时。推断一下是不是每列都有1
{
for(int j=1;j<=m;++j)
if(!vis[j])
return false;
return true;
} void dfs(int rth)
{
if(rth>n+1)//由于当rth=n+1时,还须要推断judge()
return;
if(judge())//注意这两个if
{
yes=1;
return;
}
for(int i=rth;i<=n&&!yes;++i)
{
if(row_ok(i))
{
dfs(i+1);//注意这里不是dfs(step+1),选的行号是递增的
for(int j=1;j<=m;++j)//还原
if(mp[i][j])
vis[j]=0;
}
}
} int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
scanf("%d",&mp[i][j]);
memset(vis,0,sizeof(vis));
yes=0;
dfs(1);
if(yes)
printf("Yes, I found it\n");
if(!yes)
printf("It is impossible\n");
}
return 0;
}
[ACM] POJ 3740 Easy Finding (DFS)的更多相关文章
- [ACM] POJ 3740 Easy Finding (DLX模板题)
		
Easy Finding Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16178 Accepted: 4343 Des ...
 - poj 3740 Easy Finding(Dancing Links)
		
Easy Finding Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15668 Accepted: 4163 Des ...
 - POJ 3009-Curling 2.0(DFS)
		
Curling 2.0 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12158 Accepted: 5125 Desc ...
 - 题解报告:poj 1321 棋盘问题(dfs)
		
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
 - POJ 2251 Dungeon Master(dfs)
		
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
 - poj 3740 Easy Finding 二进制压缩枚举dfs 与 DLX模板详细解析
		
题目链接:http://poj.org/problem?id=3740 题意: 是否从0,1矩阵中选出若干行,使得新的矩阵每一列有且仅有一个1? 原矩阵N*M $ 1<= N <= 16 ...
 - POJ 2386——Lake Counting(DFS)
		
链接:http://poj.org/problem?id=2386 题解 #include<cstdio> #include<stack> using namespace st ...
 - POJ 1321 棋盘问题(dfs)
		
传送门 棋盘问题 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38297 Accepted: 18761 Descri ...
 - [ACM] poj 1088 滑雪  (内存搜索DFS)
		
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 73409 Accepted: 27141 Description ...
 
随机推荐
- HTML学习笔记(五)
			
1. Javascript是一种脚本语言,它的作用是提供用户交互.动态更改内容.数据验证. 2. 我们使用script标签将javascript的语句嵌入到html文档中. 3 ...
 - Some Web API Url Samples
			
URI Verb Description ...
 - 【转】Spring的中IoC及AOP
			
1. Spring介绍 Spring是轻量级的J2EE应用程序框架.Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spri ...
 - JAVA 解密pkcs7(smime.p7m)加密内容 ,公钥:.crt 私钥:.pem  使用Bouncy Castle生成数字签名、数字信封
			
第三方使用公钥.crt加密后返回的内容,需要使用私钥解密.pem 返回内容格式如下 MIME-Version: 1.0 Content-Disposition: attachment; filenam ...
 - linux修改密码出现Authentication token manipulation error的解决办法
			
转自 :http://blog.163.com/junwu_lb/blog/static/1916798920120103647199/ Authentication token manipulati ...
 - [Mybatis - 1A] - Cause: java.sql.SQLException: Column count doesn't match value count at row 1
			
严重: Servlet.service() for servlet [springMVC] in context with path [/ExceptionManageSystem] threw ex ...
 - 学会使用简单的MySQL操作
			
第十八章 学会使用简单的MySQL操作 在前面两个章节中已经介绍过MySQL的安装了.可是光会安装还不够.还须要会一些主要的相关操作.当然了,关于MySQL的内容也是非常多的.仅仅只是对于linux系 ...
 - java集成jpush实现客户端推送
			
代码地址如下:http://www.demodashi.com/demo/13700.html 前言 java 集成jpush 实现客户端推送 一.准备工作 开发环境: jdk1.6 Eclipse ...
 - KindEditor 4.1.7的使用技巧
			
1.载入进这个自己写的js代码 $(function(){ if ($("textarea.editor").length) { var editor = KindEditor.c ...
 - java基础讲解09-----接口,继承,多态
			
还有什么包装类,数字类,这些简单的我就不想过去介绍,前面也大概的介绍了下,继承,多态 1.类的继承 继承的思想:基于某个父类的扩展,制定一个新的子类.子类可以继承父类原有的属性,方法,也可以重写父类的 ...