如圖所示: 有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有乙個是空盤。
我們把這些蚱蜢順時針編號為 1~8。每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。
請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不變(也就是1-8換位,2-7換位,…),至少要經過多少次跳躍?
輸出乙個整數表示答案
【總結】1.一看就知道是深搜的題目,但是一開始不知道要怎麼記錄已經訪問過的狀態。解決方法是,把序列當成乙個 long long型的數。開乙個bool型的陣列,1e9的大小是開的下的。
2.關於環形的陣列,前移動和後移動可能會溢位下標。解決方法是,轉移後的座標公式為
(原座標+改變量+陣列長度)%陣列長度
ps:有一點要注意的是,這個陣列必須是從0開始的陣列。
3.關於bfs。佇列裡面放什麼呢,放乙個pair型的,前乙個放陣列狀態,後面放走的步驟。
4.在移動的時候,swap之後得到改變的陣列狀態之後,要再換回去,開始另一種情況
#include
using
namespace std;
typedef
long
long ll;
typedef pair
int> state;
bool vis[
1000000000];
//bool型的陣列可以開到這麼大,int不行
int a[12]
;//記錄陣列
int dx[5]
=;//四種移動方向
ll res=
987654321
;//結果狀態
ll getsum()
//得到陣列狀態的數字
return tem;
}int
bfs(
) vis[hh]
=true
;int nowkg=0;
int k=8;
while
(hh)
k--;}
for(
int i=
0;i<
4;i++)}
}}intmain()
memset
(vis,
false
,sizeof
(vis));
cout<<
bfs(
)<
}
跳蚱蜢 藍橋杯
藍橋杯2017 c c a組第2題 題目 有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有乙個是空盤。我們把這些蚱蜢順時針編號為 1 8 每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不...
藍橋杯 跳蚱蜢 bfs
題意 有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有乙個是空盤。我們把這些蚱蜢順時針編號為 1 8 每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不變 也就是1 8換位,2 7換位,至...
藍橋杯 跳蚱蜢 Python
題目 如圖 p1.png 所示 有9只盤子,排成1個圓圈。其中8只盤子內裝著8只蚱蜢,有乙個是空盤。我們把這些蚱蜢順時針編號為 1 8。每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不變 也就是...