有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換位,至...