迷宮(一)
樣例輸入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 每次只能上下左右走動,並且不能走出地...