從迷宮的起點到終點的最短路徑,用深度優先搜尋
c實現
#include
int n,m,p,q,min=99999999;
int a[100][100],book[100][100];
void dfs(int
x,int
y,int step)
,,,};
if(x==p&&y==q)
for(k=0;k<=3;k++)
}return;
}int main()
scanf("%d
%d%d
%d",&startx,&starty,&p,&q);
book[startx][starty]=1;
dfs(startx,starty,0);//步數也帶上作為引數
//輸出最短步數
printf("%d",min);
return
0;}
python 實現
def
dfs(x,y,step):
global min
global tx,ty
next = [[0, 1], [1, 0], [0, -1], [-1, 0]]
if x == mx and y== my:
if min > step:
min = step
print(min)
return
for k in range(4):
tx = x + next[k][0]
ty = y + next[k][1]
if tx < 0
or tx > n-1
or ty < 0
or ty > m-1:
continue
if a[tx][ty]==0
and book[tx][ty]==0:
book[tx][ty]=1
dfs(tx,ty,step+1)
book[tx][ty]=0
return
if __name__=='__main__':
n=int(input('輸入矩陣行數n:'))
m=int(input('輸入矩陣列數m:'))
arraystring = input('輸入乙個二維陣列:')
a=eval(arraystring)
startx = int(input('輸入開始的位置startx:'))
starty = int(input('輸入開始的位置starty:'))
mx = int(input('輸入的終點位置mx:'))
my = int(input('輸入的終點位置my:'))
book=[[0]*51]*51
min=99999999
book[startx][starty]=1
dfs(startx,starty,0)
print("最短步數:%d" % min)
迷宮(深度搜尋 存最短路徑)
問題描述 定義乙個二維陣列 定義乙個5 5的陣列maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。輸入 乙個5 5的二維陣列,表示乙個迷宮。資料保證有唯一解。輸出 左上角到右下角的最短路徑,格式如樣例所...
迷宮的最短路徑(寬度優先搜尋)
題目 給定乙個大小為n t imes mn times m n time sm的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四個的通道移動,請求出從起點到終點所需的最小步數。限制條件n,m 100 n,m le 100 n,m 10 0。輸入 s g 分別表示牆壁 通道 起點和終點 n 1...
練習 最短路徑 深度搜尋
乙個根據深度搜尋模型寫的最短路徑 參考如下 啊哈演算法 4.2 p81 最短路徑 public class shortpath 向右走 向下走 向左走 向上走 地圖是乙個5 5的矩陣 public static int x 5,y 5 定義終點 public static int ex 2,ey 2...