codevs1225八數碼難題(搜尋 )

2022-04-06 04:14:28 字數 1514 閱讀 5420

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 鑽石 diamond

題解yours和zero在研究a*啟發式演算法.拿到一道經典的a*問題,但是他們不會做,請你幫他們.

問題描述

在3×3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是:給出一種初始布局(初始狀態)和目標布局(為了使題目簡單,設目標狀態為123804765),找到一種最少步驟的移動方法,實現從初始布局到目標布局的轉變。

輸入描述 input description

輸入初試狀態,一行九個數字,空格用0表示

輸出描述 output description

只有一行,該行只有乙個數字,表示從初始狀態到目標狀態需要的最少移動次數(測試資料中無特殊無法到達目標狀態資料)

樣例輸入 sample input

樣例輸出 sample output

資料範圍及提示 data size & hint

詳見試題

bfs

#include#include

#define n 500000

using

namespace

std;

struct

node

a[n];

int g[4][4]=,,,};

int xx[4] = ;

int yy[4] = ;

int hash[3733800

];int

step[n];

int h,t=1

,flag;

intcheck()

inthash()

return0;

}int pd(int x,int

y)void move(int x,int

y)

if (hash()) t++;}}

}void

search()

h++;

}}int

main()

dfs

#includeusing

namespace

std;

int matrix[4][4]=,,,};

int dx=;int dy=;int st[4][4

],dep,step;

bool flag=false

;int

check()

int jdg(int sx,int sy,int x,int

y)void search(int x,int y,int fx,int

fy)

if(step==dep)return

;

for(int i=0;i<=3;i++)

}}int

main()

for(dep=0;;dep++)

}return0;

}

CodeVs 1225 八數碼難題

yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布局 初始狀態 和目標布局 為了使題...

codevs1225 八數碼難題

題目描述 description yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布...

codevs 1225 八數碼難題 題解

yours和zero在研究a 啟發式演算法.拿到一道經典的a 問題,但是他們不會做,請你幫他們.問題描述 在3 3的棋盤上,擺有八個棋子,每個棋子上標有1至8的某一數字。棋盤中留有乙個空格,空格用0來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布局 初始狀態 和目標布局 為了使題...