主页面:http://blog.csdn.net/dolfamingo/article/details/77825569
代码一:以数组充当队列,利用结构体中的pre追溯上一个状态在数组(队列)中的下标:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <string>
#include <set>
#define ms(a,b) memset((a),(b),sizeof((a)))
using namespace std;
typedef long long LL;
const int INF = 2e9;
const LL LNF = 9e18;
const int MOD = 1e9+7;
const int MAXN = 1e6+10;
#define AIM 1 //123456789的哈希值为1
struct node
{
int status;
int s[9];
int loc;
char path;
int pre; //pre为上一个操作在队列中的下标,用于输出路径
};
int vis[MAXN], fac[9] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320};
int dir[4][2] = { -1,0, 1,0, 0,-1, 0,1 };
char op[4] = {'u', 'd', 'l', 'r' };
int cantor(int s[]) //获得哈希函数值
{
int sum = 0;
for(int i = 0; i<9; i++)
{
int num = 0;
for(int j = i+1; j<9; j++)