DFS--求解迷宮問題- IT閱讀
文章推薦指數: 80 %
DFS--求解迷宮問題. 2018-12-09 254. 問題:從(0,0)出發到(n-1,m-1)的路徑. 輸入:. 6 8 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 1 1 0 1 1 1 1 0 1 0 0 0 0
DFS--求解迷宮問題
首頁
最新
HTML
CSS
JavaScript
jQuery
Python3
Python2
Java
C
C++
Go
SQL
首頁
最新
Search
DFS--求解迷宮問題
2018-12-09254
問題:從(0,0)出發到(n-1,m-1)的路徑
輸入:
6 8
0 0 1 0 0 0 1 1
1 0 0 0 1 0 0 0
0 0 0 1 1 0 1 1
1 1 0 1 0 0 0 0
0 0 0 0 0 1 0 1
1 0 1 0 0 0 0 0
輸出:
(0,0)(0,1)(1,1)(1,2)(1,3)(0,3)(0,4)(0,5)(1,5)(2,5)(3,5)(3,6)(4,6)(5,6)(5,7)
解題思路:就是dfs搜尋,起點是(0,0),終點是(n-1,m-1),如果到達終點就直接返回,否則遞迴dfs搜尋其上下左右四個方向的
點,這四個方向可用intmove[4][2]={{0,1},{1,0},{0,-1},{-1,0}};表示,四個方向要滿足一下條件才能被訪問,1就是未被訪問過visited[i][j]==0且是通道map[i][j]==0,才能訪問,注意因為求的是路徑,所以根據遞迴的特點先返回的是終點,所以可以用棧來存放,然後逐個pop就是正確的路徑順序了。 s;
intmain(){
cin>>n>>m;
for(inti=0;i
但是dfs求的不是最短的路徑,而bfs求的是最短路徑。
需要用到佇列。
總結:
①從起點開始dfs滿足條件將起點入棧
②開始遍歷該點的四周(就像圖中的訪問到該點時,就要遍歷與其相連且未被訪問的點,滿足條件再dfs
只不過visited是一維陣列作為標記是否訪問過)
③:四周滿足條件的標記好已訪問再dfs,然後返回1;
④:就是不斷的pop。
直到棧為空
#include
延伸文章資訊
- 1迷宫问题(maze problem)——深度优先(DFS)与广度优先 ...
迷宫问题的求解可以抽象为连通图的遍历,因此主要有两种方法。 第一种方法是:深度优先搜索(DFS)加回溯。 其优点:无需像广度优先搜索那样(BFS) ...
- 2你竟然不知道怎麼走迷宮?其實超簡單
迷宮尋路是計算機編程中基礎的問題,常用的算法為廣度優先(BFS)和深度優先(DFS). 廣度優先、深度優先聽起來很高大上的樣子,其實非常好理解。
- 3迷宮問題(BFS)+(DFS) - 有解無憂
迷宮問題(BFS)+(DFS) ; using namespace std; ; int maxn = 100; ; bool inq[maxn][maxn] = { false }; ...
- 4迷宫---DFS和BFS解法_DoubleCake的专栏 - CSDN博客
题目描述 Description在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走。从左上角((0,0)“s”)位置处走到右下角((n-1 ...
- 5演算法淺談——走迷宮問題與廣度優先搜索 - - CodingNote.cc
與它相對的深度優先搜索,英文自然就是Depth First Search,簡寫成dfs。所以如果在閱讀我或者其他人的程式碼時發現有個函數叫做bfs或者dfs,如果你能 ...