dfs深度優先搜尋解決迷宮類問題(遍歷)
dfs解決迷宮問題(dfs的入門應用)
下面是對應程式碼:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int min=9999999;
int c[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; //這裡是定義的四個方向,上下左右
int n;
int s[1000][1000]; //一個足夠容納迷宮的二維陣列
void dfs(int x,int y,int step) //dfs接受座標和當前步數
{
int i,xn,yn;
if(x==n-1&&y==n-1) //一定要把結束條件放在前面,先判斷是否結束
{ //這裡判斷是否到達終點
if(step<min) //判斷步數是否小於當前最小步數
min=step;
return;
}
for(i=0; i<4; i++) //因為有四個方向可以走,所以這裡迴圈4次,四種情況
{
xn=x+c[i][0]; //這裡一定要把走過之後的x,y給一個新的變數(比如這裡的xnyn)
yn=y+c[i][1]; //因為要以原來的位置為中心向上下左右分別測試走,所以原來的位置不能改變。
if(xn<0||xn>=n||yn<0||yn>=n) //判斷是否出界
{
continue; //如果出界,跳過這一步,進入下一步
}
if(s[xn][yn]==0) //判斷是否是能走的路
{
s[xn][yn]=1; //如果能走,把上一步標記為牆以防重複
dfs(xn,yn,step+1); //進入下一步
s[xn][yn]=0; //回溯,回來的時候把之前走過的還變成路
}
}
return;
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d",&s[i][j]);
}
}
dfs(0,0,0);
printf("%d",min); //輸出最小步數
}
相關文章
- 用python深度優先遍歷解迷宮問題Python
- DFS(深度優先搜尋)
- 圖的遍歷:深度優先搜尋與廣度優先搜尋
- 深度優先搜尋演算法(DFS)講解演算法
- 深度優先搜尋演算法-dfs講解演算法
- 【演算法】深度優先搜尋(DFS)演算法
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- 再來一篇深度優先遍歷/搜尋總結?
- 深度優先搜尋 (Depth First Search 簡稱:DFS)
- 「Golang成長之路」迷宮的廣度優先搜尋Golang
- 遞迴——深度優先搜尋(DFS)——以滑雪問題為例(自頂而下)遞迴
- 深度優先搜尋(DFS)思路及演算法分析演算法
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- 二分搜尋樹系列之[ 深度優先-層序遍歷 (ergodic) ]Go
- 二分搜尋樹系列之「深度優先-層序遍歷 (ergodic) 」Go
- golang學習筆記——迷宮的廣度優先搜尋Golang筆記
- 深度優先搜尋
- js實現深度優先遍歷和廣度優先遍歷JS
- leetcode 刷題之深度優先搜尋LeetCode
- 學習資料結構 - 深度優先搜尋 DFS 記錄資料結構
- ybtoj:深度優先搜尋
- 深度優先遍歷,廣度優先遍歷實現物件的深拷貝物件
- 圖的廣度優先搜尋和深度優先搜尋Python實現Python
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹
- hdu 1728 逃離迷宮 搜尋
- 迷宮問題
- The order of a Tree (二叉搜尋樹+先序遍歷)
- python實現圖(基於圖的不同儲存方式)的深度優先(DFS)和廣度(BFS)優先遍歷Python
- 廣度優先遍歷圖解圖解
- 圖論系列之「基於深度優先遍歷的尋路演算法 (Path) 」圖論演算法
- 寬度優先遍歷
- 【知識點】深度優先搜尋 Depth First Search
- 深度和廣度優先搜尋演算法演算法
- 8.dfs--王子救公主(遍歷迷宮,王子和公主訪問過同一位置,即成功救公主)
- 啟發式搜尋的方式(深度優先,廣度優先)和 搜尋方法(Dijkstra‘s演算法,代價一致搜尋,貪心搜尋 ,A星搜尋)演算法
- 藍橋杯-迷宮(BFS+DFS)
- 圖論系列之「深度優先遍歷及聯通分量」圖論
- 從1到n的全排列(深度優先搜尋)