計蒜客藍橋杯坑點

2021-10-02 07:57:39 字數 1311 閱讀 7058

參加了計蒜客的藍橋杯模擬賽,在做一道迷宮問題的時候,最開始用dfs做,超時了。後來才想起來此類問題應該用bfs做,然後做的時候又發現了坑點。。。。

題目:

輸入:

3 4

..*.

..*.

..*.

22 2 2 4

3 1 1 4

3 4

輸出:

3
解題思路:這道題直接用bfs求最短路即可,需要注意的就是傳送門這個坑。一般情況下我們考慮的是乙個點傳送到另乙個點就完了。但是題目所給資料種可能存在乙個點傳送到另乙個點,接著被傳送到的點自身也有傳送門,則會被再次傳送。

ac**:

#include#include#include#includeusing namespace std;

const int maxn = 1005;

int n, m, q, x, y, ans;

char g[maxn][maxn];

bool vis[maxn][maxn];

struct n

};queueq;

struct dtp[maxn][maxn];

int dx = ;

int dy = ;

bool ok(int u, int v)

void bfs(int u, int v, int w)

while(tp[tem.x][tem.y].tx != 0 && tp[tem.x][tem.y].ty != 0 && g[tp[tem.x][tem.y].tx][tp[tem.x][tem.y].ty] != '*')

if(tem.x == x && tem.y == y)

for(int i = 0; i < 4;i++)

} }

}int main()

scanf("%d", &q);

for(int i = 1; i <= q;i++)

scanf("%d%d", &x, &y);//終點地方

bfs(1, 1, 0);

if(ans >= 0x3f3f3f3f / 2)

printf("no solution\n");

else

printf("%d\n", ans);

} return 0;

}

藍橋杯 計蒜客之逃生

題幹 蒜頭君在玩一款逃生的遊戲。在乙個 n m 的矩形地圖上,蒜頭位於其中乙個點。地圖上每個格仔有加血的藥劑,和掉血的火焰,藥劑的藥效不同,火焰的大小也不同,每個格仔上有乙個數字,如果格仔上的數字是正數說明是乙個藥劑代表增加的生命值,如果是負數說明是火焰代表失去的生命值。蒜頭初始化有 v 點血量,他...

藍橋杯 計蒜客之買書

必須寫乙個部落格來出出心中這口惡氣,因為每次遇到遞迴的問題都會卡很長時間,這次也不例外 生氣的表情 哼 題幹 蒜頭君去書店買書,他有 m元錢,書店裡面有 n本書,每本書的 為 pi元。蒜頭君很愛學習,想把身上錢都用來買書,並且剛好買 k本書。請幫蒜頭君計算他是否能剛好用 m元買 k本書。第一行輸入 ...

藍橋杯 計蒜客之踏青

題幹 蒜頭君和他的朋友週末相約去召喚師峽谷踏青。他們發現召喚師峽谷的地圖是由一塊一塊格仔組成的,有的格仔上是草叢,有的是空地。草叢通過上下左右 4個方向擴充套件其他草叢形成一片草地,任何一片草地中的格仔都是草叢,並且所有格仔之間都能通過上下左右連通。如果用 代表草叢,代表空地,下面的峽谷中有 2 片...