POJ3740
来源:互联网 发布:python八数码算法 编辑:程序博客网 时间:2024/06/05 05:31
#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int m,n;
int map[20][350];
int vis[350];
bool pan1()
{
for(int i=0;i<n;i++)
if(vis[i]==0)returnfalse;
return true;
}//判断是否某一列完全没有1
bool pan2()
{
for(int i=0;i<n;i++)
if(vis[i]>1)returnfalse;
return true;
}//判断新加入的行是否会与前面的行冲突
bool dfs(int t)
{
if(pan1())returntrue;//判断已找到的行是否符合条件
if(t>=m)
{
if(pan1())returntrue;
else returnfalse;
}//如果找到了最后一行,判断是否符合条件
for(int i=0;i<n;i++)
{
if(map[t][i]==1)vis[i]++;
}//对于当前这一行
if(pan2())
{
if(dfs(t+1))returntrue;
}//判断加进这一行后是否与前面发生矛盾
for(int i=0;i<n;i++)
{
if(map[t][i]==1)vis[i]--;
}//如果矛盾,则回溯
if(dfs(t+1))returntrue;
return false;
}
int main()
{
while(cin>>m>>n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
scanf("%d",&map[i][j]);
memset(vis,0,sizeof(vis));
if(dfs(0))cout<<"Yes, I found it\n";
else cout<<"It is impossible\n";
}
return 0;
}
注意输入输出,不然会坑爹的超时
- poj3740
- POJ3740
- POJ3740
- poj3740
- poj3740 Easy Finding(深搜)
- poj3740---dancing links
- POJ3740-精确覆盖,Dancing_links
- POJ3740--Easy Finding
- poj3740 Easy Finding DLX
- POJ3740-Easy Finding
- 位运算加速---基于poj3740
- POJ3740 Easy Finding(Dancing Links)
- POJ3740--Easy Finding(Dancing Links)
- 【POJ3740】Easy Finding,解题报告+思路+代码
- POJ3740 Easy Finding 舞蹈链 DLX
- 【POJ3740】Easy Finding DLX(Dancing Links)精确覆盖问题
- POJ3740精确覆盖(dfs +状压+位运算)
- 在醒着的时间里,追求你认为最有意义的
- 黑客步骤
- 【CF149D】【Coloring Brackets】
- C语言字符串,字符转数字,数字转字符(转)
- Linux磁盘管理
- POJ3740
- hdu 1061 Rightmost Digit(快速幂)
- "Accordian" Patience
- JavaScript知识点总结-1
- php var_export()
- UVA673 Parentheses Balance
- 小C,速成01
- bzoj 1999
- HDU - 1540 Tunnel Warfare 线段树 或者 让人心酸的暴力过