简单的 六数码问题 终于解决了EOF的问题



#include<stdio.h>

#include<math.h>

#include<string.h>

#include<stdlib.h>

#include<queue>

using namespace std;

int bug;

int eq;

int search();

int plan_a();

int plan_b();

queue<int> q;

int flag[7][7][7][7][7][7];

int a1,b1,c1,d1,e1,f1;

int trag[6];

int b[6];

int store[100];

void clear();

int num;

int main()
{
 int a[6];
 
 int i,j;
 
 for(i=0;i<6;i++)
 {
  trag[i]=i+1;
 }
  
 bug=1;
 
 eq=1;
 
    while((scanf("%d",&a[0]))!=EOF)
    {
     bug=1;
 
     eq=1;
 
     q.push(a[0]);
    
  for(i=1;i<6;i++)
  {
   scanf("%d",&a[i]);
     
   q.push(a[i]);
  }
 
  flag[a[0]][a[1]][a[2]][a[3]][a[4]][a[5]]=1;
 
  while(bug==1&&!q.empty())
  {
   search();
  } 
  if(bug==0)
  {
   store[num]=1;
   num=num+1;
  }
  else
  {
   store[num]=0;
   num=num+1;
  }
        clear();
       


    }
 
 for(i=0;i<num;i++)
 {
  if(store[i]==1)
  {
   printf("Yes\n");
  }
  else
  {
   printf("No\n");
  }
 }
 return 0;
}
int search()

 a1=q.front();
 
 q.pop();
 
 b1=q.front();
 
 q.pop();
 
 c1=q.front();
 
 q.pop();
 
 d1=q.front();
 
 q.pop();
  
 e1=q.front();
 
 q.pop();
  
 f1=q.front();
 
 q.pop();
 
 plan_a();
 
 plan_b();
   
}
int plan_a()
{
 int i;
 
 b[0]=d1;
 
 b[1]=a1;
 
 b[2]=c1;
 
 b[3]=e1;
 
 b[4]=b1;
 
 b[5]=f1;
 
    if(flag[b[0]][b[1]][b[2]][b[3]][b[4]][b[5]]==0)
    {
     for(i=0;i<6;i++)
     {
   if(b[i]!=trag[i])
   {
    eq=0;
    
    break;
   }
  }
  if(eq==1)
  {
   bug=0;
   return 0;
  }
  else
  {
   for(i=0;i<6;i++)
   {
    q.push(b[i]);
   }
   
   flag[b[0]][b[1]][b[2]][b[3]][b[4]][b[5]]=1;
  }
    }
    eq=1;
}
int plan_b()
{
 int i;
 
 b[0]=a1;
 
 b[1]=e1;
 
 b[2]=b1;
 
 b[3]=d1;
 
 b[4]=f1;
 
 b[5]=c1;
 
    if(flag[b[0]][b[1]][b[2]][b[3]][b[4]][b[5]]==0)
    {
     for(i=0;i<6;i++)
     {
   if(b[i]!=trag[i])
   {
    eq=0;

                break;
   }
  }
  if(eq==1)
  {
   bug=0;
       
   return 0;
  }
  else
  {
   for(i=0;i<6;i++)
   {
    q.push(b[i]);
   }
   
   flag[b[0]][b[1]][b[2]][b[3]][b[4]][b[5]]=1;
  }
    }
    eq=1;
}
void clear()
{
 while(!q.empty())
 {
  q.pop();
 }
 for(a1=1;a1<7;a1++)
 {
     for(b1=1;b1<7;b1++)
     {
      for(c1=1;c1<7;c1++)
      {
       for(d1=1;d1<7;d1++)
       {
        for(e1=1;e1<7;e1++)
        {
         for(f1=1;f1<7;f1++)
         {
          flag[a1][b1][c1][d1][e1][f1]=0;
         }
        }
       }
      }
     }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值