1. 程式人生 > >bzoj1085: [SCOI2005]騎士精神(a*)

bzoj1085: [SCOI2005]騎士精神(a*)

有效 height limit stat med 狀態 分享 www. through

1085: [SCOI2005]騎士精神

Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 2555 Solved: 1472
[Submit][Status][Discuss]

Description

  在一個5×5的棋盤上有12個白色的騎士和12個黑色的騎士, 且有一個空位。在任何時候一個騎士都能按照騎
士的走法(它可以走到和它橫坐標相差為1,縱坐標相差為2或者橫坐標相差為2,縱坐標相差為1的格子)移動到空
位上。 給定一個初始的棋盤,怎樣才能經過移動變成如下目標棋盤: 為了體現出騎士精神,他們必須以最少的步
數完成任務。

技術分享

Input

  第一行有一個正整數T(T<=10),表示一共有N組數據。接下來有T個5×5的矩陣,0表示白色騎士,1表示黑色騎
士,*表示空位。兩組數據之間沒有空行。

Output

  對於每組數據都輸出一行。如果能在15步以內(包括15步)到達目標狀態,則輸出步數,否則輸出-1。

Sample Input

2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100

Sample Output

7
-1

題解:

雖然已經聽過三四次講a*可是還是第一次寫...還是照著hzwer神犇寫的....(我太弱啦!

你深搜無力,廣搜不精,貪心WA,打表RE,就你還企圖騙分,做你的美夢!——《oi魂》

重點是在每步深搜中 引入估價函數,當發現當前的狀態一定不是最優解時直接跳出,是一種很有效的剪枝

這個估價函數很簡單...所以這題也差不多算是一道板子題

代碼就不放了....參考hzwer即可,我覺得他是寫的最簡潔易懂的了

bzoj1085: [SCOI2005]騎士精神(a*)