有乙個 n×mn \times mn×m 的迷宮,其中 . 表示空地, * 表示障礙物。除此之外,有 qqq 個單向傳送門:如果進入格仔 (ai,bi)(a_i,b_i)(ai,bi) ,那麼會被立即傳送到 (ci,di)(c_i,d_i)(ci,di) 。保證每個點至多是乙個傳送門的入口。
如果傳送門最終傳送到障礙物上,那麼將會卡在障礙物上不能移動。
在傳送門內部傳送的花費是 000,在空地上每次可以往周圍四個格仔移動,花費是 111。
現在我們想知道從 (1,1)(1,1)(1,1) 走到 (x,y)(x,y)(x,y) 的最短距離。如果無法到達終點,輸出 「no solution」(不含引號)。只要經過終點就算到達,即如果終點上有傳送門也沒有關係。
輸入格式
第一行兩個整數 n,mn , mn,m ,表示地圖大小。
接下來 nnn 行,每行 mmm 個字元,表示地圖。
接下來一行乙個整數 qqq ,表示傳送門個數。
接下來 qqq 行,每行四個整數 ai,bi,ci,dia_i,b_i,c_i,d_iai,bi,ci,di 。
最後一行兩個整數 x,yx,yx,y 表示目的地。
輸出格式
乙個整數表示最短距離。
資料範圍
對於 20%20%20% 的資料: 0對於 50%50%50% 的資料: 0對於 80%80%80% 的資料: 0對於 100%100%100% 的資料: 03 4
….….
…*.2
2 2 2 4
3 1 1 4
3 4樣例輸出
給出地圖大小
輸入地圖:" . 「代表能走,」 * "代表障礙
輸入傳送門,從(a,b)點傳送到*(c,d)點,不消耗路程
輸入終點
問你最短路,有則輸出最短路,否則輸出no solution
bfs跑,遇到傳送門把傳送的終點壓入佇列,不消耗路程。
#include"bits/stdc++.h"
using namespace std;
const int n = 1005;
struct node;
int n,m,p,a[105],b[105],c[105],d[105],x,y;
char mp[n][n];//地圖
int vis[n][n];//標記
int dir[4][2] = ,,,};
bool check(int x,int y)
int bfs()
}} if(f==0)
for(int i = 0; i < 4; ++i)
}} return 0;
}int main()
2020藍橋杯A組模擬題BFS迷宮
傳送門 這是一道坑點極其多的bfs題,難度倒是還好,就是可能好多細節處理不好就會一直wa心態咋咧,這道題就是在原有bfs的基礎上加上乙個傳送門,傳送門大家如果練習過bfs專題的話應該不會陌生吧,但是這題存在多個傳送門而且可以互相傳送,那麼我們就考慮有可能傳送到障礙物上或者回到原點形成乙個傳送環,這種...
藍橋杯 BFS 迷宮
本題為2019年省賽b組e題 要求按字典序列印軌跡 問題描述 下圖給出了乙個迷宮的平面圖,其中標記為 1 的為障礙,標記為 0 的為可 以通行的地方。010000 000100 001001 110000 迷宮的入口為左上角,出口為右下角,在迷宮中,只能從乙個位置走到這 個它的上 下 左 右四個方向...
2020 計蒜客藍橋杯B 組模擬賽(一) 迷宮
2020 計蒜客藍橋杯b 組模擬賽 一 迷宮 用bfs佇列實現 include define maxn 1005 define maxm 1005 define maxq 105 using namespace std typedef pair int,int pii char mmap maxn ...