迷宮問題 最短路

2022-05-02 11:30:10 字數 979 閱讀 5930

一、題目(poj 3984)

給出乙個只有0和1組成的5x5的矩陣表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。

二、解題思路

迷宮問題中的最短路多用bfs,由於要輸出最短路,一般可以在更新時儲存前驅節點,這裡使用dfs從終點尋找距離一次減一的節點,直到到達起點。

三、**實現

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

78 typedef pairp;

9const

int inf = 1000000;10

const

int max_n = 100 + 10;11

const

int max_m = 100 + 10;12

intn, m;

13int

sx, sy, ex, ey;

14int

dis[max_n][max_m];

15int dx = , dy = ;

16int maze[max_n][max_m + 1

];17

bool vis[max_n][max_m + 1

];18 stacks;

1920

intbfs()

2143}44

}45return

dis[ex][ey];46}

4748

void dfs(int x,int

y)49

62return;63

}64else

6582}83

}84return;85

}86void

slove()

8791

92int

main()

93

詳解迷宮最短路問題

給定乙個n m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。最初,有乙個人位於左上角 1,1 處,已知該人每次可以向上 下 左 右任意乙個方向移動乙個位置。請問,該人從左上角移動至右下角 n,m 處,至少需要移動多少次。資料保證 1,1 處和 n,...

迷宮最短路徑問題

問題描述 給定乙個迷宮和乙個起點乙個終點,求起點到終點的最短路徑長度。sample input 說明 5行5列的迷宮,為牆,為路,起點為 0,3 終點為 4,4 sample output 若不可達輸出 1 解答 用bfs的方法,借助乙個佇列實現。1 include2 include3 includ...

迷宮問題 最短路徑問題

給定乙個 n nn n 的二維陣列,如下所示 int maze 5 5 它表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。資料保證至少存在一條從左上角走到右下角的路徑。輸入格式 第一行包含整數 n。接下來 nn 行,每行...