-->Seven Puzzle

原文是日语 这里就直接写中文了

 Descriptions:

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 6,图(c)为2 7 3 4 0 5 1 6。

input

以上格式提供多个谜题。请处理到输入的最后。给定的谜题的数量在1,000以下。

output

请将每个拼图输出到最后一行的最小麻烦。

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

题目链接:
https://vjudge.net/problem/Aizu-0121

从目标卡牌序列"01234567"开始着手入队列,然后走出不同的卡牌序列,再将走出这些卡牌序列的步数存储,最后比对题目要求的卡牌序列,找出答案即可,代码有详解

AC代码:

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 310
using namespace std;
map<string,int>mp;//卡牌序列对应的步数
queue<string>q;//卡牌序列
string now,net;
string s;
//移动方向,右,左,上,下(给定一维数组,要向上(下),就是往前(后)推四张牌)
int dt[]= {,-,,-};
void bfs()
{
q.push("");
while(!q.empty())
{
now=q.front();
q.pop();
int pos=now.find('');//找到0的位置
for(int i=; i<; i++)
{
int tpos=pos+dt[i];
//3、7位置不能往右移 0、4位置不能往左移
if(tpos>=&&tpos<&&(!((pos==||pos==)&&i==)&&!((pos==||pos==)&&i==)))
{
net=now;
swap(net[pos],net[tpos]);//交换pos和tpos位置的数字,形成新的卡牌序列
if(mp[net]==)//卡牌序列没出现过
{
mp[net]=mp[now]+;//步数+1
q.push(net);
}
}
}
}
return;
}
int main()
{
bfs();//初始化,找出所有可能的卡牌序列
mp[""] = ;
while()
{
s="";//存放题目要求的卡牌序列
int a = ,b;
while(a--)
{
if(!(cin >> b))
return ;//这一行的处理是加了个结尾,不加的话死循环
s += b+'/0';
}
cout <<mp[s] << endl;
}
return ;
}

【Aizu - 0121】Seven Puzzle (反向bfs)的更多相关文章

  1. AOJ 0121: Seven Puzzle【BFS】

    From: AOJ 0121 思路:与前几题的bfs不同,这次的bfs没有明确的移动对象,看似任意一个数都可以当成对象移动.这时我们只需要抓住一个格子就行,比如我们把0作为移动对象,那么0在地图中漫游 ...

  2. AOJ 0121: Seven Puzzle (BFS DP STL 逆向推理)(转载)

    转载自:  http://m.blog.csdn.net/blog/Enjoying_Science/42008801 题目链接:http://acm.hust.edu.cn/vjudge/probl ...

  3. Aizu 0121 Seven Puzzle(变进制数的完美hash)

    一遍预处理跑完所有情况,O(1)回答就好.状态记录我用的康拓和逆康拓. #include<bits/stdc++.h> using namespace std; ]; ]; ]; int ...

  4. 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开

    [kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...

  5. HDU 1043 Eight(反向BFS+打表+康托展开)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 题目大意:传统八数码问题 解题思路:就是从“12345678x”这个终点状态开始反向BFS,将各 ...

  6. POJ1077 Eight —— 反向BFS

    主页面:http://www.cnblogs.com/DOLFAMINGO/p/7538588.html 代码一:以数组充当队列,利用结构体中的pre追溯上一个状态在数组(队列)中的下标: #incl ...

  7. UVa 1599 理想路径(反向BFS 求最短路径 )

    题意: 给定一个有重边有自环的无向图,n个点(2 <= n <= 100000), m条边(1 <= m <= 200000), 每条边有一个权值, 求从第一个点到n的最少步数 ...

  8. 【HDU - 1043】Eight(反向bfs+康托展开)

    Eight Descriptions: 简单介绍一下八数码问题:在一个3×3的九宫格上,填有1~8八个数字,空余一个位置,例如下图: 1 2 3 4 5 6 7 8   在上图中,由于右下角位置是空的 ...

  9. 康托展开+反向bfs

    康托展开+反向bfs hdu 1043 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1043 #include <iostream> # ...

随机推荐

  1. StackExchange.Redis 封装类

    using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using ...

  2. Gralde 同步失败

    Gralde 同步失败 尝试了各种方法,至少我觉得常见的一些方法我都尝试了.但一直下载依赖失败 > Could not resolve all files for configuration ' ...

  3. Win10《芒果TV》商店版双十一独家大礼,每日前100名用户免费领取7天VIP

    为答谢大家对Win10<芒果TV>商店版一年以来一如既往的支持,2016年11月1日-11月30日期间,每天登录<芒果TV>UWP版(最新版本v3.1.3)的前100位用户可领 ...

  4. ORA-13541: system moving window baseline size (691200) greater than retention (432000)

    修改awr生成报告时间间隔和保存时间时报错,由默认的每小时生成,保存8天修改为每半个小时生成一次,保存5天: SQL, retention); , retention); END; * ERROR a ...

  5. 微服务示例-Spring Cloud

    1~开发准备 JDK:1.8 Spring Boot:1.5.9.RELEASE Spring Coud:Edgware.RELEASE IDE:IntelliJ IDEA 2017 Maven:3. ...

  6. Hadoop集群(第1期)CentOS安装配置

    1.准备安装 1.1 系统简介 CentOS 是什么? CentOS是一个基于Red Hat 企业级 Linux 提供的可自由使用的源代码企业级的 Linux 发行版本.每个版本的 CentOS 都会 ...

  7. python常用数据结构(1)

    python中有四种最常用的数据结构,分别是列表(list),字典(dict),集合(set)和元组(tuple) 下面简单描述下它们的区别和联系 1.初始化 不得不说,python数据结构的初始化比 ...

  8. 9个WebGL的演示

    1.  WebGL Water This incredible demo is as fluid as you could believe.  Raise and drop the ball into ...

  9. Nginx学习笔记---服务与集群

    一.集群 什么是集群 服务器架构集群:多台服务器组成的响应式大并发,高数据量访问的架构体系. 特点: (1)成本高 (2)能够降低单台服务器的压力,使用流量平均分配到多台服务器 (3)使网站服务架构更 ...

  10. 【转】如何在Ubuntu 14.04 LTS上设置Nginx虚拟主机

    介绍 转自http://www.pandacademy.com/%E5%A6%82%E4%BD%95%E5%9C%A8ubuntu-14-04-lts%E4%B8%8A%E8%AE%BE%E7%BD% ...