dfs為深度優先搜尋,即為順著一條道走到黑,當什麼時候走不動了,才開始往回開始走,它與bfs則不同,bfs是邊走邊看,把每種可能都看一下,但是dfs只要找到一條道路即可。話不多說了,直接看題把
問題描述:
小明置身於乙個迷宮,請你幫小明找出從起點到終點的最短路程。
小明只能向上下左右四個方向移動。
輸入
輸入包含多組測試資料。輸入的第一行是乙個整數t,表示有t組測試資料。
每組輸入的第一行是兩個整數n和m(1<=n,m<=100)。
接下來n行,每行輸入m個字元,每個字元表示迷宮中的乙個小方格。
字元的含義如下:
『s』:起點
『e』:終點
『-』:空地,可以通過
『#』:障礙,無法通過
輸入資料保證有且僅有乙個起點和終點。
輸出
對於每組輸入,輸出從起點到終點的最短路程,如果不存在從起點到終點的路,則輸出-1。
樣例輸入
15 5s-###
-----
##---
e#---
---##
樣例輸出
9下面我來分別介紹一下bfs和dfs來解決問題得思路:
1、bfs迷宮問題在我得前一篇已經詳細講解了,若是沒有看的話,請先去看,看完之後你會感覺豁然開朗。下面我就直接放bfs的**了:
1 #include 23 typedef structss4
ss;8 ss queue[100];9
intsx,sy,dx,dy;
10int visit[100][100]=;
11int dxy[4][2]=,
13 ,
14 ,
15
16};
17int
a,b,step;
18int array[100][100
];19
void dfs(int x,int
y);20
void print_data(int
rear);
21int main(int argc, char *ar**)
2241
else
if(st[i][j]=='e'
)4247else
if(st[i][j]=='-'
)48 array[i][j]=0;49
else
if(st[i][j]=='#'
)50 array[i][j]=1;51
}5253}
5455
//printf("dx=%d,dy=%d\n",dx,dy);
5657
for(i=0;i)
5863
dfs(sx,sy);
64 printf("
%d%",step-1
);65
return0;
66}6768
void dfs(int x,int
y)69
9394
if(next_x==dx&&next_y==dy)
95 print_data(rear-1
);96
}97 front++;98}
99}100101
void print_data(int
rear)
102111
112113 }
2、dfs去找步數真的是非常的方便啊,下面直接在**上注釋,**如下:
1 #include 2#define max 0xffff
3#define maxline 100
4int
sx,sy,dx,dy; //sx用來接收起點的x座標,sy用來接收起點的y座標;dx是用來接收終點的x座標,dy是用來接收終點的y座標
5int
a,b; //a,b分別是你要輸入的迷宮的寬度和長度
6int
dis[maxline][maxline]; //定義乙個距離陣列,用來存放距離
7int dxy[4][2]=,
9 ,
10 ,
11
12}; //用來改變方向的
1314
void dfs(int sx,int sy,int
step);
15bool cmp(int next_x,int next_y,int
step);
16int main(int argc, char *ar**)
1734
else
if(ch=='e'
)3540else
if(ch=='-'
)41 dis[i][j]=max;
42else
43 dis[i][j]=0;44
}45} //接收資料,並且把可以通過的距離設定為最大值,不可通過的距離設定為0
4647
for(i=0;i)
48 //列印出我們設定的距離
5354 dfs(sx,sy,0
); //將起點和當前步數傳入到dfs
55 printf("
%d",dis[dx][dy]==max?-1
:dis[dx][dy]);
56return
0; 57}
5859
void dfs(int sx,int sy,int
step)
6072}73
}7475bool cmp(int next_x,int next_y,int
step)
76
DFS實現迷宮,列印路徑輸出步數
問題描述 直接給 吧,中的注釋寫的很詳細了。include includeusing namespace std int m,n 行 列 int map 81 81 迷宮 int vis 81 81 標記是否訪問過 int next step 4 2 訪問的四個方向,右下左上 int count 記...
最少步數 迷宮問題型別)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述這有乙個迷宮,有0 8行和0 8列 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1...
迷宮問題dfs
迷宮問題 棧作為深度優先遍歷 dfs 採用的搜尋方法的特點是盡可能先對縱深方向進行搜尋 可以最快的找到解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct sttype 迷宮問題常用...