小哈去玩迷宮,結果迷路了,小哼去救小哈。迷宮由n行m列的單元格組成(n和m都小於等於50),每個單元格要麼是空地,要麼是障礙物。
問題:幫小哼找到一條從迷宮的起點通往小哈所在位置的最短路徑。(注意:障礙物不能走,小哼也不能走出迷宮外,0表示空地,1表示障礙物)
輸入:
5 40 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
輸出:
#include#include#define inf 10000000
using
namespace
std;
intn,m,sx,sy,ex,ey,tx,ty;
int a[50][50],b[50][50
];int next[4][2]=,,,};//
四個方向
int minn=inf;
void dfs(int x,int y,int
step)
for(int i=0;i<4;i++)
if(b[tx][ty]==0&&a[tx][ty]==0)//
這個位置沒有走過並且是空地
}return;}
intmain()
}scanf(
"%d%d%d%d
",&sx,&sy,&ex,&ey);//
起點和終點座標
b[sx][sy]=1;//
最開始在起點位置,標記
dfs(sx,sy,0
); printf(
"%d\n
",minn);
return0;
}
解救小哈(深度搜尋)
本題可以用深度搜尋,也可以用廣度搜尋,相對來說,廣度搜尋更加簡潔,但是為了學習深度搜尋,故本題採用深度搜尋。思路 依然是使用遞迴,一步一步向前試探,試探後再回溯,最後比較結果,即可得出答案。如下 include define max n 100 define max m 100 inta max n...
dfs 深搜 模板
關於深度優先搜尋的效率問題,有多種解決方法。最具有通用性的是剪枝 prunning 也就是去除沒有用的搜尋分支。有可行性剪枝和最優性剪枝兩種。int mx 4 向上下左右四個方向移動 0,1 0,1 1,0 1,0 int my 4 bool check int x,int y 判斷是否滿足條件的子...
解救小哈 BFS演算法舉例
有一天,小哈乙個人去玩迷宮。但是方向感不好的小哈很快就迷路了。小哼得知後便去解救無助的小哈。此時的小哼已經弄清楚了迷宮的地圖,現在小哼要以最快的速度去解救小哈。那麼,問題來了.輸入5 4 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 1 1 4 3 輸出輸入 3 3...