藍橋杯演算法練習筆記 10 廣度優先搜尋 BFS

2021-10-03 20:08:33 字數 4385 閱讀 7070

1.佇列queue

#include

#include

using

namespace std;

intmain()

//佇列沒有clear()方法,可以這樣清空

while

(!q.

empty()

)return0;

}

2.書院主持人

北大附中書院有m個同學,他們每次都很民主地決策很多事情。按羅伯特議事規則,需要乙個主持人。同學們民主意識強,積極性高,都想做主持人,當然主持人只有一人。為了選出主持人,他們想到了乙個辦法並認為很民主。方法是:大家圍成一圈,從1到m為每個同學編號。然後從1開始報數, 數到n的出局。剩下的同學從下位開始再從1開始報數。最後剩下來的就是主持人了。現在已經把同學從1到m編號,並約定報數為n的出局,請程式設計計算一下,哪個編號的同學將會成為主持人。

#include

#include

using

namespace std;

intmain()

int cur=1;

while

(q.size()

>1)

else

} cout<

front()

<

}

3.迷宮問題

對於dfs要列舉所有的可能性,如果地圖過大,那麼效率很低

對於bfs是分層搜尋,因此第一次搜尋到終點時,當前搜素的層數就是最短路徑的長度

#include

#include

using

namespace std;

int n,m;

char maze[

105]

[105];

bool vis[

105]

[105];

int dir[4]

[2]=

,,,}

;//方向

boolin(

int x,

int y)

//節點

struct node};

intbfs

(int sx,

int sy)

else}}

}return-1

;}intmain()

}int x,y;

for(

int i=

0;i}

cout<<

bfs(x,y)

<

return0;

}/*樣例輸入:

5 6....s*

.**...

.*..*.

*..**.

.t....

樣例輸出:

7*/

4.一維座標的移動
/*在長度為【0,n】的一維座標中,輸入a,b的位址,問能否從a到b。

移動方式:向前一步(座標+1),向後一步(座標-1),跳(座標*2)*/

#include

#include

#include

using

namespace std;

bool vis[

100]

;int

main()

if(now+

1<=n &&

!vis[now+1]

)if(now-

1>=0&&

!vis[now-1]

)if(now*

2<=n &&

!vis[now*2]

)}return0;

}/*樣例輸入:

10 2 7

樣例輸出

3*/

5.密碼鎖

}/*樣例輸入:

1234

2144

樣例輸出:

2*/6.三階平面魔方

}/*樣例輸入:

412756

389樣例輸出:

2 */

7.吃糖的時間

#include

#include

#include

#include

using

namespace std;

typedef

struct

node;

int maxn;

queue q;

vector<

int> g[

100010];

bool vis[

100010];

void

bfs()}

}}}int

main()

t.v=c;

t.step=1;

vis[t.v]=1

; q.

push

(t);

bfs();

cout<

return0;

}/*樣例輸入:

4 3 1

2 1 2

2 31 4

樣例輸出:

5 */

藍橋杯練習 演算法訓練

演算法訓練 審美課 時間限制 1.0s 記憶體限制 256.0mb 問題描述 審美的歷程 課上有n位學生,帥老師展示了m幅畫,其中有些是梵谷的作品,另外的都出自五歲小朋友之手。老師請同學們分辨哪些畫的作者是梵谷,但是老師自己並沒有答案,因為這些畫看上去都像是小朋友畫的 老師只想知道,有多少對同學給出...

藍橋杯 基礎練習 大數演算法

之前做過很多大數的題目了吧,現在,那麼我們來統計下簡單的大數問題。大數加法,大數減法,大數乘除,大數篩選,大數階層,好了,現在就針對這幾種問題貼上簡單 吧 大數加減和乘除就列出加法和乘法,其它的型別差不多 我們都知道,大數,要用陣列來存放,都是簡單的進製問題,這些就不多說,貼 大數加法 includ...

演算法筆記 8 2 廣度優先搜尋BFS

三 相關例題 這次我們改變尋路策略,不知要找出路線,而且想知道從起點到終點的最短步數是多少 兩個相鄰節點間看作相隔一步 我們可以按如下的圖示進行寬度優先搜尋 起點a是第一層,發現從a出發能訪問到b和c,於是b c是第二層 按順序訪問第二層,先看b。從b出發能訪問到d和e,於是d e是第三層,等第二層...