zoj1008 gnome tetravex 很久之前的dfs

来源:互联网 发布:朵朵淘宝小号批发 编辑:程序博客网 时间:2024/04/28 23:02

嗯,第一次做时想了好久,后来找答案,发现正方形不能旋转。嗯,看错了。

#include<stdio.h>
#include<memory.h>
int array [25][4];
int use[25];
int result[5][5];
bool flag;
int n;
bool can(int x,int y, int i)
{
                 if(x==0&&y==0)
                 return true ;
                 else if (x==0&&y!=0)
                {
                                 if(array [result[0][y-1]][1]!=array[i][3])
                                                 return false ;
                }
                 else if (y==0&&x!=0)
                {
                                 if(array [result[x-1][0]][2]!=array[i][0])
                                 return false ;
                }
                 else
                {
                                 if(array [result[x-1][y]][2]!=array[i][0]||
                                                 array[result[x][y-1]][1]!=array [i][3])
                                 return false ;
                }
                 return true ;
}
//**********************************************************
void dfs(int k)
{
                 int x,y,i;
                x=k/n;
                y=k%n;
                 if(k==n*n)
                {
             flag= true;
             return;
                }
                for(i=0;i<n*n;i++){
                 if(use[i]!=0&&can(x,y,i)){
         use[i]--;
         result[x][y]=i;
         dfs(k+1);
         if(flag) return;
         use[i]++;
         result[x][y]=-1;
  }
 }
}//***********************************************************
int main()
{
 int i,j;
 int a0,a1,a2,a3;
 int cases=0;
 while(scanf( "%d",&n)&&n)
 {
  cases++;
  flag=false;
  memset(result,-1, sizeof(result));
  memset(use,0, sizeof(use));
  for(i=0;i<n*n;i++)
  {
                scanf( "%d%d%d%d",&a0,&a1,&a2,&a3);
    use[i]=1;
    array[i][0]=a0;
    array[i][1]=a1;
    array[i][2]=a2;
    array[i][3]=a3;
  }
  dfs(0);
  if(cases>1)
   printf( "\n");
  if(flag)
   printf( "Game %d: Possible\n",cases);
  else
   printf( "Game %d: Impossible\n",cases);
 }}

原创粉丝点击