藍橋杯 演算法提高 學霸的迷宮

2021-10-24 00:26:51 字數 1365 閱讀 3188

資源限制

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

問題描述

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

輸入格式

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

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

輸出格式

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

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

3 3

001100

110

4

rdrd

3 3

000000

000

4

ddrr

1、由題意得,計算從左上角得點到右下角點的最短路徑,且按字典序輸出。只需計算每一步的下一步的路徑,即可得到這一步的路徑,顯然用bfs搜尋。

2、可以使用乙個佇列來幫助完成搜尋,需要依次搜尋下一位置是否合法,以及是否路可通,只要佇列不空,意味著還沒有搜尋完每乙個座標,但當以及有某一方法到達右下角的座標時,即得到了可行的最短路徑。為滿足最短路徑多條時,輸出最小字典序的路徑,在搜尋過程中,直接按照字典序排序搜尋即可。

#include

#include

using

namespace std;

char a[

505]

[505];

int flag[

505]

[505]=

;//記錄是否經過該座標

int vm[4]

[2]=

,,,}

;//按字典序排列,直接輸出

char dis[4]

=;//string dis="dlru";

//盡量使用char陣列防止超時

struct node

;queue q;

intmain()

q.push

(no);}

}}}

演算法提高 學霸的迷宮 藍橋杯

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

演算法提高 學霸的迷宮(藍橋杯)

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

藍橋杯 演算法提高 學霸的迷宮

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