poj3740

#include<stdio.h>
#include<iostream>
int map[16][300];
int vistx[16];
int visty[300];
int zhenflag=0;
int X;
int Y;
void xuanlie(int lie)
{
 if(zhenflag==1)
  return ;
 if(lie==Y)
 {
  zhenflag=1;
  printf("Yes, I found it\n");
  return;
 }
 if(visty[lie]==1)
 {
  xuanlie(lie+1);
 }
 else
 {
  for(int i=0;i<X;i++)
  {
   int flag=0;
   if(map[i][lie]==1&&vistx[i]==0&&visty[lie]==0)
   {
    
    for(int j=0;j<Y;j++)
    {
     if(visty[j]==1&&map[i][j]==1)
     {
      flag=1;
      break;
     }
    }
    if(flag==1)
     continue;
    vistx[i]=1;
    for(int j=0;j<Y;j++)
    {
     if(map[i][j]==1)
     {
      visty[j]=1;
     }
    
    }
    xuanlie(lie+1);
    for(int j=0;j<Y;j++)
    {
     if(map[i][j]==1)
     {
      visty[j]=0;
     }
    }
    vistx[i]=0;
   }
  }
 }
}
int main()
{
 freopen("in.txt","r",stdin);
 while(scanf("%d%d",&X,&Y)!=EOF)
 {
  for(int i=0;i<X;i++)
  {
   for(int j=0;j<Y;j++)
   {
    scanf("%d",&map[i][j]);
   }
  }
  zhenflag=0;
  for(int i=0;i<X;i++)
   vistx[i]=0;
  for(int i=0;i<Y;i++)
   visty[i]=0;
  xuanlie(0);
  if(zhenflag==0)
   printf("It is impossible\n");
 }
 return 0;
}

posted on 2016-12-29 15:21  霸王程  阅读(105)  评论(0编辑  收藏  举报