1225 八數碼難題

2021-09-07 10:48:52 字數 1633 閱讀 8692

時間限制: 1 s

空間限制: 128000 kb

題目等級 : 鑽石 diamond

題解檢視執行結果

description

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

問題描述

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

輸入描述 

input description

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

輸出描述 

output description

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

樣例輸入 

sample input

樣例輸出 

sample output

資料範圍及提示 

data size & hint

詳見試題

分類標籤 tags 點此展開 

**有點亂

思路還算清晰

bfs+hash判重

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxn=5;6

int xx[5]=;

7int yy[5]=;

8struct

node

9a[100001

];12

int hashfind[3733801

];13

int step[200

];14

int h=0,t=1;15

int bc[maxn][maxn]=,,,};

16int

hash()

1727

}28 s=s%3733801;29

if(hashfind[s]==0)30

34else

3538}39

intcheck()

4048}49

return1;

50}51void move(int x,int

y)5266}

67swap(a[t].mp[wx][wy],a[t].mp[x][y]);

68 step[t]=step[h]+1;69

if(check()==1)70

74if(hash()==1

)75 t++;76}

77}78}

79void

bfs()

8091}92

}93 h++;94}

95}96int

main()

97113 now++;

114}

115}

116bfs();

117return0;

118 }

1225 八數碼難題

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

wikioi1225 八數碼難題

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

CodeVs 1225 八數碼難題

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