題記 BFS 九宮重排 藍橋杯

2021-10-05 02:42:28 字數 1187 閱讀 3012

如下面第乙個圖的九宮格中,放著 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 顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。...