/*
题目大意:有一个紧急开启密码锁的任务。密码由四位数字组成;每个数字从1到9;每次,可以对每一个数字进行加1或者减1;当从1加到9时,由9再加1会变为1;当从9减到1时,由1再减1会变为9;也可以交换两个相邻的数字,每次操作作为一个step。你的任务就是用最少的步骤解锁!
首先考虑1234的下一step有可能是什么样的数字
针对每一位数字有四种操作,+1,-1,左交换,右交换(最左边的数字只有右交换,最右边只有左交换)
那么下一step的数字
第一数字位:2234,9234,2134
第二数字位:1334,1134,2134,1324
第三数字位:1244,1224,1324,1243
第四数字位:1235,1233,1243
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
struct node{
int num[4],step;
}first,last;//初始状态和要求状态
int vis[11][11][11][11];//4维数组,记录是否访问过
题目大意:有一个紧急开启密码锁的任务。密码由四位数字组成;每个数字从1到9;每次,可以对每一个数字进行加1或者减1;当从1加到9时,由9再加1会变为1;当从9减到1时,由1再减1会变为9;也可以交换两个相邻的数字,每次操作作为一个step。你的任务就是用最少的步骤解锁!
首先考虑1234的下一step有可能是什么样的数字
针对每一位数字有四种操作,+1,-1,左交换,右交换(最左边的数字只有右交换,最右边只有左交换)
那么下一step的数字
第一数字位:2234,9234,2134
第二数字位:1334,1134,2134,1324
第三数字位:1244,1224,1324,1243
第四数字位:1235,1233,1243
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
struct node{
int num[4],step;
}first,last;//初始状态和要求状态
int vis[11][11][11][11];//4维数组,记录是否访问过