演算法提高 學霸的迷宮(經典 Bfs)

2021-10-03 08:06:41 字數 2221 閱讀 9110

試題 演算法提高 學霸的迷宮

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

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

輸入格式

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

接下來n行,每行m個數,數之間沒有間隔,為0或1中的乙個。0表示這個格仔可以通過,1表示不可以。假設你現在已經在迷宮座標(1,1)的地方,即左上角,迷宮的出口在(n,m)。每次移動時只能向上下左右4個方向移動到另外乙個可以通過的格仔裡,每次移動算一步。資料保證(1,1),(n,m)可以通過。

輸出格式

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

第二行k個字元,每個字元∈,分別表示上下左右。如果有多條長度相同的最短路徑,選擇在此表示方法下字典序最小的乙個。

樣例輸入

input sample 1:

3 3001

100110

input sample 2:

3 3000

000000

樣例輸出

output sample 1:

4rdrd

output sample 2:

4ddrr

資料規模和約定

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

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

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

注意pre 陣列儲存結點的前驅資訊,只記錄前驅到達該結點是urdl的哪乙個,這樣我們就可以從終點一步一步找到起點了。

為了滿足字典序最小的,每次bfs擴充套件的方向是dlru即可。

#include

using

namespace std;

const

int maxn =

501;

const

int dir[4]

[2]=

,,,}

;const

char alp[5]

="dlru"

;char g[maxn]

[maxn]

;//儲存圖的資訊

bool vis[maxn]

[maxn]

;//是否訪問

int pre[maxn]

[maxn]

;//點的前驅

int dis[maxn]

[maxn]

;//到起點的距離

int n, m;

typedef pair<

int,

int> p;

void

bfs()}

}}void

get_ans

(int r,

int c)

intmain()

bfs();

printf

("%d\n"

, dis[n]

[m])

;get_ans

(n,m)

;return0;

}

…可以做乙個struct,把dis,vis等陣列省去,如下:

struct node

;

還有乙個思路

從終點往起點bfs,然後不用pre記錄前驅,bfs之後,只要從起點開始,往四個方向找,如果滿足新的dis是之前的dis減1,那麼就重新以這個結點為當前結點,直到終點。

ps. 編者曾為了省去pair,把二維陣列利用雜湊函式對映到一維,也就是

int

hash

(int r,intc)

使用時只需要

v=hash

(r,c)

; r=v/

501; c=v%

501;

但是,這樣雜湊對映需要耗時,一來一去,導致只能通過80%。

bfs 演算法提高 學霸的迷宮

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

演算法提高 學霸的迷宮

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

演算法提高 學霸的迷宮

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