演算法提高 學霸的迷宮

2021-10-08 11:44:42 字數 1610 閱讀 4223

問題描述

學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。

但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。

因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到了迷宮的地圖,準備提前計算最短的路線。

可是他現在正向妹子解釋這件事情,於是就委託你幫他找一條最短的路線。

輸入格式

第一行兩個整數 n, m,為迷宮的長寬。

接下來 n 行,每行 m 個數,數之間沒有間隔,為 0 或 1 中的乙個。

0 表示這個格仔可以通過,1 表示不可以。

假設你現在已經在迷宮座標 (1, 1) 的地方,即左上角,迷宮的出口在 (n, m)。

每次移動時只能向上下左右 4 個方向移動到另外乙個可以通過的格仔裡,每次移動算一步。

資料保證 (1,1),(n,m) 可以通過。

輸出格式

第一行乙個數為需要的最少步數 k。

第二行 k 個字元,每個字元 ∈,分別表示上下左右。

(如果有多條長度相同的最短路徑,選擇在此表示方法下字典序最小的乙個)

樣例輸入1

3 3001

100110

樣例輸出1

4rdrd

樣例輸入2

3 3000

000000

樣例輸出2

4ddrr

資料範圍

有20%的資料滿足:1 ≤ n, m ≤ 10

有50%的資料滿足:1 ≤ n, m ≤ 50

有100%的資料滿足:1 ≤ n, m ≤ 500。

題解

bfs:

=>【簡單的解釋】<=

#include

#include

#include

#define x first

#define y second

using

namespace std;

typedef pair<

int,

int> pii;

const

int n =

510;

int n, m;

char g[n]

[n];

int dist[n]

[n];

int dx[4]

=, dy[4]

=;char dir[4]

=;void

bfs(

int x,

int y)}}

intmain()

}}cout << dist[0]

[0]<< endl;

cout << ans << endl;

return0;

}

ps:藍橋杯題庫15年更新的題目,居然在19年省賽**現了 (#°д°)

演算法提高 學霸的迷宮

問題描述 學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到了迷宮的地圖,準備提前計算最短的路線。可是他現在正向妹子解釋...

演算法提高 學霸的迷宮

問題描述 學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到了迷宮的地圖,準備提前計算最短的路線。可是他現在正向妹子解釋...

演算法提高 學霸的迷宮

問題描述 學霸搶走了大家的作業,班長為了幫同學們找回作業,決定去找學霸決鬥。但學霸為了不要別人打擾,住在乙個城堡裡,城堡外面是乙個二維的格仔迷宮,要進城堡必須得先通過迷宮。因為班長還有妹子要陪,磨刀不誤砍柴功,他為了節約時間,從線人那裡搞到了迷宮的地圖,準備提前計算最短的路線。可是他現在正向妹子解釋...