廣度優先搜尋演算法 例題maze

2021-08-16 05:16:35 字數 1535 閱讀 8291

time limit: 1 sec  

memory limit: 128 mb

submit: 158  

solved: 39 [

submit][

status][

web board]

500年前,jesse是我國最卓越的劍客。他英俊瀟灑,而且機智過人^_^。

突然有一天,jesse心愛的公主被魔王抓走,並困在了乙個巨大的迷宮中。jesse聽到這個訊息,非常緊張。他知道公主在迷宮中還能堅持t個小時,他急忙趕到迷宮,開始到處尋找公主的下落。

jesse會為你提供迷宮的地圖以及所剩的時間t。請你判斷他是否能在所剩的時間內找到心愛的公主。

題目包括多組測試資料。每組測試資料以三個整數n,m,t 開頭,分別代表迷宮的長、高以及公主能堅持的小時數。

緊接著有m行,n列字元,由".","*","p","s"組成。

其中"." 代表能夠行走的空地。"*" 代表牆壁,jesse不能從此通過。

"p" 是公主所在的位置。

"s" 是jesse的起始位置。

每次jesse只能選擇「上、下、左、右」任意乙個方向走一步。 每走一步花費1個小時。

輸入以0 0 0結束。

如果能在規定時間內救出公主輸出「yes」,否則輸出「no」。

4 4 10

....

....

....

s**p

0 0 0

yes

測試樣例中,王子從s點,上 右 右 右 下,一共花了五個小時剛好找到公主所在的p點 

這道題把所有的走的情況放在佇列裡然後出隊判斷最先走出來的一定是最快的然後判斷時間是不是符合就ok,不多說上**

# include

# include

using namespace std;

struct node

;queueq;

int n, m, t;

char ch[105][105];

int dir[4][2] = ;

//sx,sy起點,px,py終點

int sx,  sy,  px,  py;

bool bfs()

struct node temp, flag;

temp.x = sx;

temp.y = sy;

temp.time = 0;

q.push(temp);

while(!q.empty())

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

if(ch[tx][ty] == '.')}}

return false;

}int main(int argc, char *argv)

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

//這裡一步很關鍵,把p點記錄下來後標記可走,函式裡面判斷

if(ch[i][j] == 'p')}}

if(bfs())

else

}return 0;}

廣度優先搜尋演算法

廣度優先搜尋 bfs 這個是第乙個研究的課題,廣度優先搜尋也叫寬度優先搜尋,英文為breadth first searth,開始看的時候一頭霧水,基本也能懂大致意思,但是還不是真正的理解,今天又仔細看看,大致理解上又更深了一層吧。下面來總結下,自己的一些體會,以及對它的獨到的理解。大的方面來說它是一...

廣度優先搜尋演算法

在深度優先搜尋中,深度越大的結點越先得到擴充套件。如果把它改為深度越小的結點越先得到擴充套件,就是廣度優先搜尋法。廣度優先搜尋演算法的基本思想 1 建立乙個空的狀態佇列ss 2 建立乙個空的狀態庫sb 3 把初始狀態s 0 存入佇列ss中 4 若佇列狀態是目標狀態,則搜尋成功,演算法執行中止。如該狀...

廣度優先搜尋演算法

看了下廣度優先搜尋演算法得定義為從乙個頂點開始,找到最短路勁,歸結為一種連通圖得遍歷策略 如果我們要求v0到v6的一條最短路 假設走乙個節點按一步來算 注意 此處你可以選擇不看這段文字直接看圖3 1 我們明顯看出這條路徑就是v0 v2 v6,而不是v0 v3 v5 v6。先想想你自己剛剛是怎麼找到這...