AOJ--0121 Seven Puzzle

2023-10-13 03:32
文章标签 puzzle aoj 0121 seven

本文主要是介绍AOJ--0121 Seven Puzzle,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Seven Puzzle

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つ目のパズルの状態(整数;空白区切り)
2つ目のパズルの状態(整数;空白区切り)::

与えられるパズルの数は1000以下です。

Output

1つ目のパズルの状態から最終状態へ移行する最小手数(整数)
2つ目のパズルの状態から最終状態へ移行する最小手数(整数)::

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
比较有新意的BFS题,思路为记录0的每次移动的位置,得到一个解空间,在从解空间里面找到题目要求的结果;在这里可以采用记忆化数组DP来完成;
以下是我的AC代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<queue>
#include<algorithm>
using namespace std;
map<string,int> DP;
int move[4]={1,-1,4,-4};
void BFS()
{queue<string> que;que.push("01234567");DP["01234567"]=0;while(!que.empty()){string now=que.front();que.pop();int p=0;for(int i=0;i<8;i++){if(now[i]=='0'){p=i;break;}}for(int i=0;i<4;i++) {int n=p+move[i];if(n>=0 && n<8 && !(p==3&&i==0) && !(p==4&&i==1)){string next=now;swap(next[p],next[n]);if(DP.find(next)==DP.end()){DP[next]=DP[now]+1;que.push(next);}}}}}
int main()
{BFS();string aa;while(getline(cin,aa)){aa.erase(remove(aa.begin(),aa.end(),' '),aa.end());cout<<DP[aa]<<endl;}return 0;} 


这篇关于AOJ--0121 Seven Puzzle的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/200469

相关文章

HDU 1097 A hard puzzle(规律)

题目: http://acm.hdu.edu.cn/showproblem.php?pid=1097 题意: 求a的b次方的最后一位。 题解: 直接从例子入手, 第一组数据 7 66,结果如下(只要最后一位所以模10) 7 9 3 1 7 9··· 循环节为4,即结果在4个数值内循环出现。 第二组数据 6 800,结果如下 6 6 6 6··· 循环节为1 ···

Aoj 2450 Do use segment tree【树链剖分】

树链剖分,个人因为姿势太丑就不发代码了。 维护四个域。 区间和,右端最大连续值,左端最大连续值,答案。 注意的是,2操作是一个有序的操作,因此需要求一个LCA,从某点更新到LCA,再从LCA更新到另一个点。当然也有不要LCA的方法,就是通过判断深度,不swap,直接旋转地找。 // whn6325689// Mr.Phoebe// http://blog.

uva519 - Puzzle (II)(回溯)

题目:uva519 - Puzzle (II) 题目大意:给出拼图,要求将给出的拼图拼成 n行m列的矩形,可以输出yes,不行输出no。 解题思路:直接dfs,但是需要剪枝。 1、判断 F 的出现个数是否等于 2 * ( n + m) , 还有IO的个数是否匹配,不匹配就直接剔除,。 2、边界问题要处理,例如第一行第N行,第一列第M列,这些地方的拼图是有要求的,这些边界拼图的的外围都

Vue - 详细介绍 vue-monoplasty-slide-verify vue3-puzzle-vcode 滑动验证组件

Vue - 详细介绍 vue-monoplasty-slide-verify & vue3-puzzle-vcode 滑动验证组件 在日常的账号登录所需要的大部分是滑动验证来检验人为操作,免于字母验证码的繁琐输入,下面介绍在Vue2和Vue3中适用的滑动验证组件。 1、vue-monoplasty-slide-verify(Vue2) 安装: npm install --save vue-

【PAT】【Advanced Level】1128. N Queens Puzzle (20)

1128. N Queens Puzzle (20) 时间限制 300 ms 内存限制 65536 kB

Jetson AGX Orin基于BlueZl蓝牙协议栈AOJ红外蓝牙体温计开发(低功耗蓝牙ble)

一、准备工作 安装blueZ以及相关的蓝牙测试工具: sudo apt updatesudo apt install bluezsudo apt install bluez-hcidump 然后看下蓝牙设备是否识别到,已经是否处于开启状态: root@test-desktop:~# hciconfig -ahci0: Type: Primary Bus: USBBD Addr

ZOJ 2836 Number Puzzle 容斥、lcm

这题和HDU 1796差不多。 code: #include <cstring>#include <iostream>#include <cstdlib>#include <cstdio>#include <vector>#include <algorithm>using namespace std;typedef long long LL;const int MAXN =

hdu 5456 Matches Puzzle Game(记忆化搜索)

题目链接:hdu 5456 Matches Puzzle Game 解题思路 式子可以变换成A=B+C,从低位处理到高位, dp[i][j][b][c] dp[i][j][b][c]表示到第i位,j有没进位,b为数字B是否已经到达最高为,c为数字C是否已经到达最高位。 代码 #include <cstdio>#include <cstring>#include <algorithm>u

AtCoder Beginner Contest 332 D题 Swapping Puzzle

D题:Swapping Puzzle 标签:全排列、深度优先搜索题意:给定两个行数和列数分别是 H H H和 W W W的二维矩阵 A A A和 B B B。可以对 A A A矩阵的相邻两行或者相邻两列进行交换,求最少的交换次数能够使得 A A A矩阵变成 B B B矩阵。( 2 < = H , W < = 5 2<=H,W<=5 2<=H,W<=5)题解:看到这个数据这么小,很容易想到暴搜。对

Deep Learning Part Seven基于RNN生成文本--24.5.2

不存在什么完美的文章,就好像没有完美的绝望。 ——村上春树《且听风吟》 本章所学的内容 0.引子 本章主要利用LSTM实现几个有趣的应用: 先剧透一下:是AI聊天软件(现在做的ChatGPT(聊天神器,水论文高手等))和图像识别(可以应用于帮助盲人领域) 1.基于 RNN 的语言模型可以生成新的文本 文本生成叙述: RnnlmGen 类的实现如下所示: import sy