POJ_3740_DFS
来源:互联网 发布:参加淘宝客有用吗 编辑:程序博客网 时间:2024/05/21 05:22
//============================================================================
// Name : POJ_3740.cpp
// Author : tiger
// Version :
// Copyright : Your copyright notice
// Description : DFS
//============================================================================
#include <iostream>
using namespace std;
int matrix[17][301];
int n,m;
bool judge(int *state)
{
int i;
for(i = 0; i < m; i++)
{
if(state[i] == 0)
return -1;
else
if(state[i] > 1)
return 1;
}
return 0;
}
int dfs( int L,int *state)
{
if(L == n)
{
if(judge(state)==0 )
return true;
else
return false;
}
int i;
bool f = true;
int s[301];
for(i =0; i < m; i++)
{
if(state[i] + matrix[L][i] > 1)
{
f = false;
break;
}
else
{
s[i] = state[i] + matrix[L][i];
}
}
if(f == false)
{
return dfs(L+1,state);
}else
{
if(judge(s)==0 || dfs(L+1,s) || dfs(L+1,state))
return true;
return false;
}
}
int main() {
freopen("in","r",stdin);
int i,j;
int state[301];
while(scanf("%d %d",&n,&m) != EOF)
{
for(i =0; i < n; i++)
{
for(j = 0; j < m; j++)
{
scanf("%d",&matrix[i][j]);
}
}
memset(state,0,sizeof(state));
if(dfs(0,state))
printf("Yes, I found it/n");
else
printf("It is impossible/n");
}
return 0;
}