Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 16202   Accepted: 4349

Description

Given a M×N matrix A. Aij ∈ {0, 1} (0 ≤ i < M, 0 ≤ j < N), could you find some rows that let every cloumn contains and only contains one 1.

Input

There are multiple cases ended by EOF. Test case up to 500.The first line of input is
M, N (M ≤ 16, N ≤ 300). The next M lines every line contains
N integers separated by space.

Output

For each test case, if you could find it output "Yes, I found it", otherwise output "It is impossible" per line.

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)的更多相关文章

  1. [ACM] POJ 3740 Easy Finding (DLX模板题)

    Easy Finding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16178   Accepted: 4343 Des ...

  2. poj 3740 Easy Finding(Dancing Links)

    Easy Finding Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15668   Accepted: 4163 Des ...

  3. POJ 3009-Curling 2.0(DFS)

    Curling 2.0 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12158   Accepted: 5125 Desc ...

  4. 题解报告:poj 1321 棋盘问题(dfs)

    Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...

  5. 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 ...

  6. poj 3740 Easy Finding 二进制压缩枚举dfs 与 DLX模板详细解析

    题目链接:http://poj.org/problem?id=3740 题意: 是否从0,1矩阵中选出若干行,使得新的矩阵每一列有且仅有一个1? 原矩阵N*M $ 1<= N <= 16 ...

  7. POJ 2386——Lake Counting(DFS)

    链接:http://poj.org/problem?id=2386 题解 #include<cstdio> #include<stack> using namespace st ...

  8. POJ 1321 棋盘问题(dfs)

    传送门 棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38297   Accepted: 18761 Descri ...

  9. [ACM] poj 1088 滑雪 (内存搜索DFS)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 73409   Accepted: 27141 Description ...

随机推荐

  1. Web开发常见的几个漏洞解决方法

    http://www.cnblogs.com/wuhuacong/archive/2013/04/15/3022011.html 如何利用SQL注入漏洞攻破一个WordPress网站 平时工作,多数是 ...

  2. 2019pycharm破解大法

    通过激活码激活Pycharm 1 先找到你的hosts文件: Windows电脑:c:\windows\system32\drivers\etc Linux/Mac电脑:/etc 2 编辑hosts文 ...

  3. Creating, detaching, re-attaching, and fixing a SUSPECT database

    今天遇到一个问题:一个数据库suspect了.然后又被用户detach了. 1,尝试将数据库attach回去,因为log file损坏失败了. 2,尝试将数据库attach回去,同一时候rebuild ...

  4. 一款实现浏览实事的资讯平台app

    一款实现浏览实事的资讯平台app 如有转载,请注明出处:http://blog.csdn.net/u012301841/article/details/46687447 github链接:https: ...

  5. 【DB2】NULLS LAST与NULLS FIRST

    DB2函数配合 select row_number() over(order by col desc nulls first/nulls last ) as rn,col from table1ord ...

  6. Java集合-Map接口相关操作方法

    Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs). 该接口描述了从不重复的键到值的映射. (1) 添加.删除操作: Object put(Ob ...

  7. openSession() 与 getCurrentSession() 有何不同和关联呢?

    在 SessionFactory 启动的时候, Hibernate 会根据配置创建相应的 CurrentSessionContext ,在getCurrentSession() 被调用的时候,实际被执 ...

  8. css-id选择器

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. mongodb - 查看正在执行的操作

    查看正在执行的操作 db.currentOp() 查看系统执行的操作 db.currentOp(True) kill正在执行的操作 db.killOp(<operation id>) 示例 ...

  10. 检查SSD磁盘是否开启了TRIM指令

    fsutil behavior QUERY DisableDeleteNotify 如果查询结果是“DisableDeleteNotify = 0”,代表SSD已经支持并启用Trim指令:如果提示为“ ...