首页 > 代码库 > POJ 3131 Cubic Eight-Puzzle 双向BFS + HASH

POJ 3131 Cubic Eight-Puzzle 双向BFS + HASH

超赞的一道搜索题,麻烦到没朋友,不过思路还是很清楚的。

双向搜索的时候需要注意一个地方就是起始状态只有一个,目标状态最多的时候感觉会有512个,所以要控制两个方向搜索的层数。第一次知道双向搜索还能控制层数,简直点赞。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map>

#pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-8)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define _INF 0x3f3f3f3f
#define Mod 6000007

using namespace std;

char Map[5][5];

int Judge(char a,char b,char c)
{
    if(a == 'W')
    {
        if(b == 'R')
            return 0;
        return 5;
    }
    else if(a == 'R')
    {
        if(b == 'W')
            return 1;
        return 3;
    }
    else if(a == 'B')
    {
        if(b == 'R')
            return 2;
        return 4;
    }
    else return 6;
}

struct Q
{
    int sta,x,y,fl,ans;
};

int mark[3000010][2];

int jx[] = { 0, 0, 1,-1};
int jy[] = {-1, 1, 0, 0};

int re[10][10];

int bit[10];

struct H
{
    int site,data,next;
}st[Mod];

int head[Mod];

int Top_H;

int Query(int data,int Top)
{
    int temp = data%Mod;

    int p = head[temp];
    for(;p != -1; p = st[p].next)
    {
        if(st[p].data =http://www.mamicode.com/= data)>