如下面第乙個圖的九宮格中,放著 1~8的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。
我們把第乙個圖的局面記為:12345678. 把第二個圖的局面記為:123.46758
顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。
本題目的任務是已知九宮的初態和終態,求最少經過多少步的移動可以到達。如果無論多少步都無法到達,則輸出-1。
——輸入:輸入第一行包含九宮的初態,第二行包含九宮的終態。
輸出:輸出最少的步數,如果不存在方案,則輸出-1。
——樣例:
13524678.
46758123.
輸出:22
————————————————————————————————————————
思路:將每一種圖看做乙個狀態,每次都是將 「 . 」的位置進行移動從而更新狀態。用bfs寬搜即可。
★:我沒有建立二維陣列,而是用乙個字串來儲存每乙個狀態,需要注意:在2,3或5,6位置,是不能夠更新狀態的。
#include
#include
#include
using
namespace std;
typedef
struct node node;
mapint> m;
//記錄狀態
queue v;
//佇列
int dir[4]
=;//方向陣列
string end_s;
//最終狀態
//不能更新的狀態
bool
check
(int x,
int lx )
intmain()
v.push
(head)
;//入隊
while
( v.
size()
) v.
push
(l);}
v.pop();
} cout <
;return0;
}
藍橋杯 九宮重排 典型bfs
如下面第乙個圖的九宮格中,放著 1 8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。我們把第乙個圖的局面記為 12345678.輸入輸入第一行包含九宮的初態,第二行包含九宮的終態。輸出輸出最少的步數,如果不存在方案,則輸出 1...
藍橋杯 九宮重排
九宮重排 如下面第乙個圖的九宮格中,放著 1 8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。我們把第乙個圖的局面記為 12345678.把第二個圖的局面記為 123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格...
bfs 藍橋杯 歷屆試題 九宮重排
如下面第乙個圖的九宮格中,放著 1 8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。我們把第乙個圖的局面記為 12345678.把第二個圖的局面記為 123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。...