2020藍橋杯A組模擬題BFS迷宮

2021-10-09 14:30:42 字數 1420 閱讀 1666

傳送門

這是一道坑點極其多的bfs題,難度倒是還好,就是可能好多細節處理不好就會一直wa心態咋咧,這道題就是在原有bfs的基礎上加上乙個傳送門,傳送門大家如果練習過bfs專題的話應該不會陌生吧,但是這題存在多個傳送門而且可以互相傳送,那麼我們就考慮有可能傳送到障礙物上或者回到原點形成乙個傳送環,這種情況就直接退出就好啦,實現對於起點如果是傳送門進行處理,還有就是對於傳送的時候是不計算路程的,d[nx][ny]=d[ex][ey],但是考慮到傳送門的不確定性,我們如果傳送到乙個之前的走過的位置,假如當前位置的路程比前乙個路程的小,那麼我們就不需要更新啦,因而我是這麼寫的:d[nx][ny]=min(d[ex][ey],d[nx][ny]),大致思路就是這樣,具體實現參考**:

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int n=

1005

;int ddx[4]

=;int ddy[4]

=;int nx[n]

,ny[n]

;char mp[n]

[n];

int tp[n]

[n];

int d[n]

[n];

bool vis[n]

[n];

int n,m;

struct node

;void

bfs(

) node now;

now.x=sx;now.y=sy;

q.push

(now)

;while

(q.size()

) q.

push

(node);

}}}}

intmain()

}int p;

scanf

("%d"

,&p)

;int index=1;

while

(p--

)int x,y;

scanf

("%d%d"

,&x,

&y);

memset

(d,inf,

sizeof

(d))

;bfs()

;if(d[x]

[y]==inf)cout <<

"no solution"

<< endl;

else cout << d[x]

[y]<< endl;

}

2020藍橋杯 B組 J迷宮 (bfs)

有乙個 n mn times mn m 的迷宮,其中 表示空地,表示障礙物。除此之外,有 qqq 個單向傳送門 如果進入格仔 ai,bi a i,b i ai bi 那麼會被立即傳送到 ci,di c i,d i ci di 保證每個點至多是乙個傳送門的入口。如果傳送門最終傳送到障礙物上,那麼將會卡...

數字遊戲 2020藍橋杯A組模擬賽

小明開始玩起來了數字遊戲,他一下子報出了一堆整數,並在報數過程中不斷詢問在這個陣列裡,有多少個子區間的積大於 0 等於 0 小於 0 輸入格式 輸入第一行包括兩個整數 n,m,表示小明已近報出的數的數量和後續詢問的次數。第二行包括 n個整數 表示小明已經報出的數。接下來 m行,每行先輸入乙個整數 o...

藍橋杯校內模擬2020

問題描述 小明想知道,滿足以下條件的正整數序列的數量 1.第一項為 n 2.第二項不超過 n 3.從第三項開始,每一項小於前兩項的差的絕對值。請計算,對於給定的 n,有多少種滿足條件的序列。輸入格式 輸入一行包含乙個整數 n。輸出格式 輸出乙個整數,表示答案。答案可能很大,請輸出答案除以10000的...