P2730 魔板

这题和八数码九数码太像了QAQ
实在不会就看我以前的题解吧
话说这题坑点还是挺多的

#include<bits/stdc++.h>
using namespace std;
const int Max=9*9*9*9*9*9*9;
int now[Max][8],come[Max],r[8],u[Max],Do[Max];
int ans[8];
bool boo[9][9][9][9][9][9][9];
int i,j,k,m,n,h=1,t=1,x;
int write(int x)
{
  if(come[x]!=-1)write(come[x]);
  if(Do[x]==1)cout<<"A";
  if(Do[x]==2)cout<<"B";
  if(Do[x]==3)cout<<"C";
  return 0;
}
int main()
{
  for(i=0;i<8;i++)cin>>ans[i];
  h=1;t=1;u[1]=0;
  for(k=0;k<8;k++)now[h][k]=k+1;
  boo
  [now[t][0]]
  [now[t][1]]
  [now[t][2]]
  [now[t][3]]
  [now[t][4]]
  [now[t][5]]
  [now[t][6]]=true;
  come[1]=-1;
  while(t<=h)
  {
    if(now[t][0]==ans[0]
	 &&now[t][1]==ans[1]
	 &&now[t][2]==ans[2]
	 &&now[t][3]==ans[3]
	 &&now[t][4]==ans[4]
	 &&now[t][5]==ans[5]
	 &&now[t][6]==ans[6]
	 &&now[t][7]==ans[7])
    {cout<<u[t]<<endl;write(t);return 0;}
    r[0]=now[t][7];r[1]=now[t][6];r[2]=now[t][5];r[3]=now[t][4];//操作一
    r[7]=now[t][0];r[6]=now[t][1];r[5]=now[t][2];r[4]=now[t][3];
    /*
    7654//操作一完成后的序列
    0123
    */
    if(!boo[r[0]][r[1]][r[2]][r[3]][r[4]][r[5]][r[6]])
    {
      h++;
      for(k=0;k<=8;k++)now[h][k]=r[k];
      come[h]=t;
      Do[h]=1;
      boo[r[0]][r[1]][r[2]][r[3]][r[4]][r[5]][r[6]]=true;
      u[h]=u[t]+1;
    }
    r[0]=now[t][3];r[1]=now[t][0];r[2]=now[t][1];r[3]=now[t][2];//操作二
    r[7]=now[t][4];r[6]=now[t][7];r[5]=now[t][6];r[4]=now[t][5];
    /*
    3012//操作二完成后的序列
    4765
    */
    if(!boo[r[0]][r[1]][r[2]][r[3]][r[4]][r[5]][r[6]])
    {
      h++;
      for(k=0;k<=8;k++)now[h][k]=r[k];
      come[h]=t;
      Do[h]=2;
      boo[r[0]][r[1]][r[2]][r[3]][r[4]][r[5]][r[6]]=true;
      u[h]=u[t]+1;
    }
    r[0]=now[t][0];r[1]=now[t][6];r[2]=now[t][1];r[3]=now[t][3];//操作三
    r[7]=now[t][7];r[6]=now[t][5];r[5]=now[t][2];r[4]=now[t][4];
    /*
    0613//操作三完成后的序列
    7524
    */
    if(!boo[r[0]][r[1]][r[2]][r[3]][r[4]][r[5]][r[6]])
    {
      h++;
      for(k=0;k<=8;k++)now[h][k]=r[k];
      come[h]=t;
      Do[h]=3;
      boo[r[0]][r[1]][r[2]][r[3]][r[4]][r[5]][r[6]]=true;
      u[h]=u[t]+1;
    }
    t++;
  }
  return 0;
}

QAQ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
魔板游戏课程设计 魔板游戏是一种智力开发类的益智游戏,它可以培养学生的逻辑思维、空间想象力以及解决问题的能力。为了设计一门有效的魔板游戏课程,我将考虑以下几个方面: 1. 课程目标:通过魔板游戏,培养学生的逻辑推理能力、团队合作意识、问题解决能力以及创新思维。同时,让学生了解计算机科学的基本概念和原理。 2. 课程内容:课程内容可以分为理论和实践两部分。在理论部分,可以介绍魔板游戏的历史、背景以及基本规则。同时,讲解计算机科学的相关知识,如算法、编程思维等。在实践部分,学生可以通过编程语言如Python或JavaScript来实现魔板游戏,并进行各种挑战和创新。 3. 教学方法:结合理论和实践,采用讲解、示范、练习和项目实践等多种教学方法。同时,鼓励学生进行团队合作和互动讨论,培养他们的合作精神和解决问题的能力。 4. 评估方式:通过课堂测验、编程作业和项目实践等多种评估方式来评估学生的学习成果。除此之外,还可以组织小组比赛来评选出优秀的魔板设计和解决方案。 5. 参考资源:引入一些优质的参考资源,如在线教程、博客文章和相关书籍,让学生可以深入学习和掌握魔板游戏的各个方面。 通过以上设计方案,这门魔板游戏课程能够帮助学生增加对计算机科学的兴趣,并培养他们的创造力和解决问题的能力。同时,这门课程也能够帮助学生提高逻辑思维和团队合作能力,为他们未来的学习和职业发展打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值