雙向BFS 藍橋杯真題 青蛙跳杯子

2021-10-25 17:47:57 字數 1452 閱讀 3967

*wwwbbb

其中,w字母表示白色青蛙,b表示黑色青蛙,表示空杯子。

x星的青蛙很有些癖好,它們只做3個動作之一:

1. 跳到相鄰的空杯子裡。

2. 隔著1只其它的青蛙(隨便什麼顏色)跳到空杯子裡。

3. 隔著2只其它的青蛙(隨便什麼顏色)跳到空杯子裡。

對於上圖的局面,只要1步,就可跳成下圖局面:

wwwbbb

本題的任務就是已知初始局面,詢問至少需要幾步,才能跳成另乙個目標局面。

輸入為2行,2個串,表示初始局面和目標局面。

輸出要求為乙個整數,表示至少需要多少步的青蛙跳。

樣例輸入

wwbb

wwbb

樣例輸出

2樣例輸入

wwwbbb

bbbwww

樣例輸出

10資料規模和約定

我們約定,輸入的串的長度不超過15

資源約定:峰值記憶體消耗(含虛擬機器) < 256m, cpu消耗 < 1000ms

雙向bfs:同時從初始字串和目標字串開始寬搜,直到兩邊出現了相同的中間字串,結果就是【從初始字串->中間字串的步數】+【從目標字串->中間字串的步數】+1

#include

using

namespace std;

mapint> cnt;

//cnt記錄到達該字串需要的步數

mapint> vis;

//vis記錄字串是否訪問過,值為1表示從初始字串演變而來,值為2表示由目標字串演變而來

queue que;

int n;

intmain()

else

if(vis[tmp]

!=vis[t])}

if(i+

1!='*'

)else

if(vis[tmp]

!=vis[t])}

if(i-

2>=

0&& t[i-2]

!='*'

)else

if(vis[tmp]

!=vis[t])}

if(i+

2!='*'

)else

if(vis[tmp]

!=vis[t])}

if(i-

3>=

0&& t[i-3]

!='*'

)else

if(vis[tmp]

!=vis[t])}

if(i+

3!='*'

)else

if(vis[tmp]

!=vis[t])}

}}}return0;

}

藍橋 青蛙跳杯子(bfs)

問題描述 樣例輸入 wwbb wwbb 樣例輸出 樣例輸入 www bbb bbb www 樣例輸出 資料規模和約定 我們約定,輸入的串的長度不超過15 資源約定 峰值記憶體消耗 含虛擬機器 256m cpu消耗 1000ms 請嚴格按要求輸出,不要畫蛇添足地列印類似 請您輸入.的多餘內容。所有 放...

青蛙跳杯子 藍橋(bfs)

試題 歷屆試題 青蛙跳杯子 wwwbbb 其中,w字母表示白色青蛙,b表示黑色青蛙,表示空杯子。x星的青蛙很有些癖好,它們只做3個動作之一 1.跳到相鄰的空杯子裡。2.隔著1只其它的青蛙 隨便什麼顏色 跳到空杯子裡。3.隔著2只其它的青蛙 隨便什麼顏色 跳到空杯子裡。對於上圖的局面,只要1步,就可跳...

藍橋杯 2017初賽 青蛙跳杯子 bfs

跳到相鄰的空杯子裡。隔著1只其它的青蛙 隨便什麼顏色 跳到空杯子裡。隔著2只其它的青蛙 隨便什麼顏色 跳到空杯子裡。對於上圖的局面,只要1步,就可跳成該局面 www bbb 本題的任務就是已知初始局面,詢問至少需要幾步,才能跳成另乙個目標局面。輸入存在多組測試資料,對於每組測試資料 輸入為2行,2個...