藍橋杯 試題 歷屆試題 九宮重排 BFS 剪枝

2022-06-25 02:30:13 字數 1360 閱讀 5380

問題描述

如下面第乙個圖的九宮格中,放著 1~8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。

我們把第乙個圖的局面記為:12345678.

把第二個圖的局面記為:123.46758

顯然是按從上到下,從左到右的順序記錄數字,空格記為句點。

本題目的任務是已知九宮的初態和終態,求最少經過多少步的移動可以到達。如果無論多少步都無法到達,則輸出-1。

輸入格式

輸入第一行包含九宮的初態,第二行包含九宮的終態。

輸出格式

輸出最少的步數,如果不存在方案,則輸出-1。

樣例輸入

12345678.

123.46758

樣例輸出

3樣例輸入

13524678.

46758123.

樣例輸出

22解題思路:

注意剪枝時機,防止乙個狀態多次計算(在將該狀態加入佇列時就要加入集合)

解決**:

1 #include2 #include

3 #include

4 #include5 #include6

using

namespace

std;78

struct

state916

};17

18//

輸入19

string begin,end; /*

初始局面和目標局面

*/20

21int dx = , dy = ; //

x,y方向向量

2223

intbfs();

2425

intmain()

2633

34int

bfs()

3550

51char mat[3][3

];52

int x,y; /*

儲存空格座標

*/53

54for( int i=0; i<3; i++)

55

63}

64}

6566

/*遍歷四個可能的方向

*/67

for( int i=0; i<4; i++)

6878 swap(str[x*3+y],str[nx*3+ny]); /*

回溯*/79}

80}81}

8283

return -1

;84 }

藍橋杯 歷屆試題 九宮重排

問題描述 如下面第乙個圖的九宮格中,放著 1 8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。我們把第乙個圖的局面記為 12345678.把第二個圖的局面記為 123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格...

藍橋杯 歷屆試題 九宮重排

問題描述 如下面第乙個圖的九宮格中,放著 1 8 的數字卡片,還有乙個格仔空著。與空格子相鄰的格仔中的卡片可以移動到空格中。經過若干次移動,可以形成第二個圖所示的局面。我們把第乙個圖的局面記為 12345678.把第二個圖的局面記為 123.46758 顯然是按從上到下,從左到右的順序記錄數字,空格...

藍橋杯 歷屆試題 九宮重排

bfs 查重 因為通過不同的路徑到達同乙個點會產生不同的串,不具有唯一性,所以查重不再是查詢乙個點到沒到過,而是找乙個中間串出沒出現過,set一下就行了 include include include include include include include include include i...