迷宮最短路徑 深度優先搜尋 C python

2021-08-07 17:12:24 字數 1568 閱讀 2092

從迷宮的起點到終點的最短路徑,用深度優先搜尋

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...