跳蚱蜢 BFS演算法

2021-09-10 14:19:09 字數 1092 閱讀 3252

這是藍橋杯的題目

題目有9只盤子,排成1個圓圈。

其中8只盤子內裝著8只蚱蜢,有乙個是空盤。

我們把這些蚱蜢順時針編號為 1~8

每只蚱蜢都可以跳到相鄰的空盤中,

也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。

請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,

並且保持空盤的位置不變(也就是1-8換位,2-7換位,…),至少要經過多少次跳躍?

注意:要求提交的是乙個整數,請不要填寫任何多餘內容或說明文字。

bfs()

與該狀態相鄰的所有狀態且沒有被訪問到

加入到佇列中去

....

標記該狀態}

這個是bfs基本模板,但是針對不同題目還是有稍微的不同,需要進行調整。

對於這道題,==目標狀態放在【狀態轉移的時候】

並且記住是跟該狀態相鄰的狀態,所以在同乙個狀態轉移中需要將狀態在轉移回來。【兩個swap】

貼上原始碼:

#include #include #include #include using namespace std;

const int maxn=1000000000;

struct notetempnote,tempsecondnote,tempswapnote;

int startnumber=123456789,endnumber=876543219;

bool vis[maxn];

int direction[4]=;

//用來合成數字

int get_num(int a)

return sum;

}//bfs

void bfs()

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

swap(numberarray[now],numberarray[(now+direction[i]+9)%9]);

int tempnumber=get_num(numberarray);

if(tempnumber==endnumber){

cout《心得:做演算法題不能心急,慢慢來,有時候乙個條件沒想到就得不出正確答案,所以需要細心,並且多做題。

藍橋杯 跳蚱蜢 bfs

題意 有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有乙個是空盤。我們把這些蚱蜢順時針編號為 1 8 每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不變 也就是1 8換位,2 7換位,至...

藍橋杯 跳蚱蜢 BFS

1.題目大意 9個盤子擺成乙個環,盤裡裝著蚱蜢,左四個,右四個,對稱軸上有乙個空盤,蚱蜢只能跳到相鄰的或隔著乙個盤子的空盤 開始時順時針編號 左四個1234,右四個5678 問最少經過多少次跳躍能讓盤子編號變為逆時針順序且開始時的空盤位置不變 左四個8765,右四個4321 2.解決方法 把當前盤子...

跳蚱蜢 藍橋杯

藍橋杯2017 c c a組第2題 題目 有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有乙個是空盤。我們把這些蚱蜢順時針編號為 1 8 每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不...