藍橋杯 2017初賽 跳蚱蜢

2021-10-23 16:26:21 字數 1357 閱讀 4079

如圖所示: 有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。每只蚱蜢都可以跳到相鄰的空盤中,也可以再用點力,越過乙個相鄰的蚱蜢跳到空盤中。請你計算一下,如果要使得蚱蜢們的隊形改為按照逆時針排列,並且保持空盤的位置不變 也就是...