36 藍橋杯之跳蚱蜢(填空題)

2021-10-02 14:36:03 字數 1114 閱讀 1310

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

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

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

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

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

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

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

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

#include

#include

#include

using

namespace std;

//局面字串,0位置,步數

struct node};

queue q;

//廣搜佇列

set visited;

//已經搜尋過的情況

//no當前操作元素,i空盤子跳的狀態

void

insertq

(node no,

int i)

}int

main()

else

}return0;

}

在查詢這題過程解題中,學到了新的知識: pair 和 make_pair 的用法

注意環的實現:通過取餘操作實現陣列滾動模擬環。

此題用的是廣度優先遍歷。

深度優先遍歷更適合目標比較明確,以找到目標為主要目的的情況。

廣度優先遍歷更適合在不斷擴大範圍時找到最優解的情況。一層一層的向下搜尋,當搜尋到已訪問過的資料時的步數一定大於(上下層關係)或等於(在同一層)初次訪問該資料時的步數,所以是對於步數來說是最短訪問路徑。

if(visited.count(s)==0)關於0的位置,因為每種不同的字串不同,0的位置也不同,每個佇列裡的元素是結構體,所以關於0的位置資訊存在結構體資訊裡。

swap(s[no.pos],s[(no.pos+i+9)%9]);取模是模擬迴圈圓,+9是防止-1,-2是負數

跳蚱蜢 藍橋杯

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

藍橋杯填空題(一)

以下 可以從陣列a中找出第k小的元素。它使用了類似快速排序中的分治演算法,期望時間複雜度是o n 的。請仔細閱讀分析原始碼,填寫劃線部分缺失的內容。include int quick select int a,int l,int r,int k int i l,j r while i j while...

藍橋杯 跳蚱蜢 bfs

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