計蒜客 迷宮(一)bfs(基礎的廣搜)

2021-10-02 13:18:32 字數 1785 閱讀 1537

迷宮(一)

樣例輸入1

34s*

*...

*.**

*t

樣例輸出1

no
樣例輸入2

34s*

*...

..**

*t

樣例輸出2

yes
解題思路這是一道典型又基礎的廣搜題,廣搜一般就是用於狀態表示比較簡單、求最優策略的問題。就是進行一層一層的搜尋,每一條路的搜尋進度都是一樣的,因此呢,要用到佇列的知識!!

首先,第一步就是判斷下一步是否能夠通過,即判斷當前位置是否超界、是否走過、是否為路。

int

can(

int x,

int y)

///判斷能不能走能返回1不能返回0

else

}

然後,判斷對列是否為空,不為空時進行下一步操作。取隊首元素,判斷該元素是否到達終點,如果到達終點輸出「yes」,如果沒有到達終點,按照下右上左(移動順序可自己定義)的順序進行搜尋移動。移動到下乙個位置時將該位置的元素入隊。

void

bfs(

int sx,

int sy)

int dx=

;///下右左上

int dy=

;for

(int i=

0; i<

4; i++)}

} cout<<

"no"

<

}

哈哈哈,以上是我的淺略見解,解釋若有不當,請指正。

最後附上ac**:

#include

#include

const

int maxn=

1000+5

;///巨集定義,陣列規模一般要比題目定義的大

using

namespace std;

char maze[maxn]

[maxn]

;///地圖

int flag[maxn]

[maxn]

;///標記初始為0,表示未走過

int n,m;

///地圖規模

int ex,ey;

///終點座標

struct node

;int

can(

int x,

int y)

///判斷能不能走能返回1不能返回0

else

}void

bfs(

int sx,

int sy)

int dx=

;///下右左上

int dy=

;for

(int i=

0; i<

4; i++)}

} cout<<

"no"

<

}int

main()

///儲存終點座標

if(maze[i]

[j]==

't')}}

bfs(sx,sy)

;return0;

}

迷宮 二 計蒜客 BFS解法

題目 蒜頭君在你的幫助下終於逃出了迷宮,但是蒜頭君並沒有沉浸於喜悅之中,而是很快的又陷入了思考,從這個迷宮逃出的最少步數是多少呢?輸入格式 第一行輸入兩個整數 n 和 m,表示這是乙個 n m 的迷宮。接下來的輸入乙個 n 行 m 列的迷宮。其中 s 表示蒜頭君的位置,表示牆,蒜頭君無法通過,表示路...

計蒜客 走迷宮2 bfs

一樣的迷宮,這次要求不是求有多少條出去的路,而是求最短出去的路,使用bfs就可以知道了。需要用乙個char陣列儲存迷宮 乙個int陣列表示距離長度 乙個bool陣列表示是否訪問過 這不是唯一的,還有其它的可能性,可以三合一,如這裡的表示方式 給你乙個 n 行 m 列的二維迷宮。s 表示起點,t 表示...

計蒜客深度優先搜尋基礎題目 走迷宮

dfs 和遞迴的區別是,dfs 是一種演算法,注重的是思想,而遞迴是程式語言的一種寫法。我們通過遞迴的寫法來實現 dfs 下面我們通過乙個實際問題來理解 dfs 到底幹了什麼。s t其中 s 表示起點,t 表示終點,表示牆壁,表示平地。你需要從 s 出發走到 t 每次只能上下左右走動,並且不能走出地...