7 パズル

7 パズルは 8 つの正方形のカードとこれらのカードがぴたりと収まる枠で構成されています。それぞれのカードには、互いに区別できるように 0, 1, 2, ..., 7 と番号がつけられています。枠には、縦に 2 個、横に 4 個のカードを並べることができます。

7 パズルを始めるときには、まず枠にすべてのカードを入れます。枠のなかで 0 のカードだけは、上下左右に隣接するカードと位置を交換することができます。たとえば、枠の状態が図(a) のときに、0 のカードの右に隣接した、7 のカードと位置を交換すれば、図(b) の状態になります。あるいは、図(a) の状態から 0 のカードの下に隣接した 2 のカードと位置を交換すれば図(c) の状態になります。図(a) の状態で 0 のカードと上下左右に隣接するカードは 7 と 2 のカードだけなので、これ以外の位置の入れ替えは許されません。

ゲームの目的は、カードをきれいに整列して図(d) の状態にすることです。最初の状態を入力とし、カードをきれいに整列するまでに、必要な最小手数を出力するプログラムを作成してください。ただし、入力されたカードの状態からは図(d) の状態に移ることは可能であるとします。

入力データは、1 行に 8 つの数字が空白区切りで与えられます。これらは、最初の状態のカードの並びを表します。例えば、図(a) の数字表現は0 7 3 4 2 5 1 6 に、図(c) は 2 7 3 4 0 5 1 6 となります。

図(a) 0 7 3 4 2 5 1 6 の場合 図(b) 7 0 3 4 2 5 1 6 の場合
図(c) 2 7 3 4 0 5 1 6 の場合 図(d) 0 1 2 3 4 5 6 7 (最終状態)

Input

上記形式で複数のパズルが与えられます。入力の最後まで処理してください。 与えられるパズルの数は 1,000 以下です。

Output

各パズルについて、最終状態へ移行する最小手数を1行に出力してください。

Sample Input

0 1 2 3 4 5 6 7
1 0 2 3 4 5 6 7
7 6 5 4 3 2 1 0

Output for the Sample Input

0
1
28

七数码,先宽搜打表再查表,注意若用一维数组储存右上不能再往右左下不能再往左了。

    #include <cstdio>#include <queue>#include <cstring>using namespace std;int d[16777219];int dx[4]={1,-1,4,-4};struct node{int x;int mapp[9];};void bfs(){node nd;nd.x=0;int z=0;for(int i=0;i<8;i++){nd.mapp[i]=i;z*=8;z+=i;}d[z]=0;queue<node> q;q.push(nd);while(!q.empty()){node t=q.front();q.pop();for(int i=0;i<4;i++){int nx=dx[i]+t.x;if(0<=nx&&nx<=7&&!(t.x==3&&i==0)&&!(t.x==4&&i==1)){int zz=0;for(int j=0;j<8;j++){zz*=8;zz+=t.mapp[j];nd.mapp[j]=t.mapp[j];}nd.x=nx;swap(nd.mapp[nx],nd.mapp[t.x]);int z=0;for(int j=0;j<8;j++){z*=8;z+=nd.mapp[j];}if(d[z]==-1){d[z]=d[zz]+1;q.push(nd);}}}}}int main(){memset(d,-1,sizeof(d));bfs();int a[10];while(~scanf("%d %d %d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7])){int z=0;for(int i=0;i<8;i++){z*=8;z+=a[i];}printf("%d\n",d[z]);}return 0;}

aizu 0121 Seven Puzzle相关推荐

  1. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  2. nomasp 博客导读:Lisp/Emacs、Algorithm、Android

    Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸,只要我的技术有提升,这个博客就会一直更新下去,感谢您的支持,欢迎您的关注与留言.目前博客有多个专栏,分别是关于 ...

  3. nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……

    Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Wi ...

  4. puzzle(0121)《一笔画》

    目录 一,一笔画三定律 二,一笔画2 1,简单图 2,带二重平行边的图 3,带1个传送门的图 4,带绿线的图 4.1,基于闭环的分割 4.2,完全分割图 4.3,对称性 4.4,基于有向小闭环的消去原 ...

  5. 学会在Unity中创建一个Match-3益智游戏 Learn To Create a Match-3 Puzzle Game in Unity

    MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:48场讲座(6h 38m) |大小解压后:2.8 G ...

  6. 【杭电ACM】1097 A hard puzzle

    [杭电ACM]1097  A hard puzzle http://acm.hdu.edu.cn/showproblem.php?pid=1097 先用int手写了算法结果竟然wrong answer ...

  7. BFS:图的最短路径  Aizu - 0558 ​​​​​​​Cheese

    Cheese Aizu - 0558 大意:在H * W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪.有一只老鼠准备从出发点吃遍每一个工厂的奶酪.老鼠有一个体力值,初始时为1,每吃一个工 ...

  8. Aizu - 0033 Ball

    这题书上写让用DFS--可是这一比较就出来啊-- Ball Aizu - 0033 図のように二股に分かれている容器があります.1 から 10 までの番号が付けられた10 個の玉を容器の開口部 A か ...

  9. Eight puzzle --HOJ 11918

    1.题目类型:模拟.哈希表.BFS. 2.解题思路:(1)模拟Eigh Puzzle的变换方式,并记录在数组中 :(2)由于变换的最终结果相同,所以采用反向的BFS遍历所有情况,并记录所有情况:(3) ...

  10. 补第四周作业总结——8 puzzle

    8 puzzle已经提供了解决思路,早期的人工智能算法A.我只能感觉它的神奇,但是没法创造性地使用它.只能按部就班地完成这周的作业. 难点在于对过程的不理解.这个33的格子搜索算法没有尽头,随着步数的 ...

最新文章

  1. vsftp421问题
  2. php 多进程 返回值,php多进程
  3. 中国式微服务技术栈2.0
  4. Windows Server2008R2 域迁移
  5. Linux iostat 命令
  6. 《机器学习概论》习题答案
  7. oracle usehash,/*+use_hash(t1 t2)*/的神奇
  8. “这张图告诉你什么?”
  9. 百度推送java_关于百度推送,请教一下大家
  10. 为什么有时优盘是只读模式_JS专题之严格模式
  11. CodeBlocks使用第三方库(以使用pcre库为例)
  12. sql server 加密_SQL Server机密–第II部分– SQL Server加密功能
  13. mac 使用 pf 做端口转发
  14. 抓包,反抓包,反反抓包
  15. 使用com.aspose.words将word模板转为PDF乱码解决方案(window下正常)
  16. asp.net c# 常见面试试题总结汇总(含答案)
  17. angularjs 实例_AngularJS过滤器示例教程
  18. AE开发之鹰眼窗口、书签
  19. origin拟合曲线
  20. Linux使用fdisk工具对SD卡进行MBR分区

热门文章

  1. 【hacker的错误集】IndentationError: expected an indented block
  2. RS232串口线接法与线芯引脚定义
  3. 7-1 厘米换算英尺英寸 (c语言)
  4. Skiplist(跳表)的简单介绍与C++实现
  5. java 根据拼音查询汉字_Java 根据汉字获取其拼音
  6. 题解 SP4487 【GSS6 - Can you answer these queries VI】
  7. C语言 | 逻辑运算符
  8. 【UI设计】扁平化设计之流行色值
  9. golang安装配置
  10. Pyhton中dataFrame型数据 values方法返回结果是数组,并将数组转化为列表的tolist方法