時間限制: 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 #include4using
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來表示。空格周圍的棋子可以移到空格中。要求解的問題是 給出一種初始布局 初始狀態 和目標布局 為了使題...