迷宮的最短路徑
題目:
N=10, M=10 (迷宮如下圖所示。, ’ . ’ , -S’ ,分別表示牆壁、通道、起點和終點)
#S######.#
#. .#
.#
##.##.####
.#######.#
…#
.####.###.
G#
給定一個大小為NxM的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四格 的通道移動。請求出從起點到終點所需的最小步數。請注意,本題假定從起點一定可以移動 到終點。
寬度優先搜尋按照距開始狀態由近及遠的順序進行搜尋,因此可以很容易地用來求最短路徑、最 少操作之類問題的答案。這個問題中,狀態僅僅是目前所在位置的座標,因此可以構造成pair 或者編碼成int來表達狀態。當狀態更加複雜時,就需要封裝成一個類來表示狀態了。轉移的方 式為四方向移動,狀態數與迷宮的大小是相等的,所以複雜度是O(4xNxM)=O(N*M)。
寬度優先搜尋中,只要將已經訪問過的狀態用標記管理起來,就可以很好地做到由近及遠的搜尋。 這個問題中由於要求最短距離,不妨用d[N] [M]陣列把最短距離儲存起來。初始時用充分大的常 數INF來初始化它,這樣尚未到達的位置就是INF,也就同時起到了標記的作用。
因為要向4個不同方向移動,用dx[4]和dy[4]兩個陣列來表示四個方向向量。這樣通過一個循 環就可以實現四方向移動的遍歷。
const int INF = 100000000;
//使用pair表示狀態時,使用typedef會更加方便一些
typedef pair<int, int> P;
//輸入
char maze[MAX_N] [MAX_M];
int N, M;
int sx, sy;//起點
int gx, gy;//終點
int d[MAX_N][MAX_M]; // 到各個位置的最短距離的陣列
// 4個方向移動的向量
int dx[4] = {1, 0, -1, 0}, dy [4] ={0, 1, 0, -1];
//求從(sx, sy)到(gx, gy)的最短距離
int dfs()
{
queue<P>qu;
for(int i =0;i < m;i++)
for(int j = 0;j < n;j++)
d[i][j] = INF;
qu.push(P(sx)(sy));
d[sx][sy] = 0;
while(!qu.empty())
{
P = qu.front();qu.pop();
if(P.first == gx && P.last == gy)
break;
else
{
for(int i = 0;i < 4;i ++)//遍歷四個方向
{
nx = P.first + dx[i];
ny = P.last + dy[i];
if(0 <= nx && nx <=N && 0<=ny && ny <= M&&maze[nx][ny] =='.' && d[nx][ny] == INF){
qu.push(P(nx,ny));//如果d[nx][ny] == INF說明未訪問過
d[nx][ny]=d[P.first][P.last]+1;}//該點加入佇列 距離增加一
}
}
}
return d[gx][gy];//返回總步數
}
相關文章
- 使用A*演算法解迷宮最短路徑問題演算法
- 迷宮可行路徑數
- 1744 迷宮
- 509迷宮
- 走迷宮
- 3090 走迷宮
- 3089 探索迷宮
- 迷宮問題
- 單源最短路徑:最短路徑性質的證明
- 基於JavaFX圖形介面演示的迷宮建立與路徑尋找Java
- 創造你的專屬迷宮 《磚塊迷宮建造者》上架WeGameGAM
- C語言 DSF (尋求迷宮起點到終點的所有路徑)C語言
- 簡單介紹Python迷宮生成和迷宮破解演算法Python演算法
- 6.4.2最短路徑
- 圖 - 最短路徑
- 內容是超正統的迷宮RPG?PSP遊戲《迷宮旅人2》深度解析遊戲
- Python迷宮生成器Python
- PHP 生成迷宮路線PHP
- 迷宮城堡(HDU-1269)
- HDU - 3790 (雙標準限制最短路徑)最短路徑問題
- 圖的最短路徑(Dijkstra | Floyd)
- 最短路徑問題
- 單源最短路徑
- 最短路:求最長最短路
- 最短路 || 最長路 || 次短路
- 回溯法求迷宮問題
- POJ3984-迷宮問題
- 藍橋杯-走迷宮(BFS)
- PHP 解迷宮之 H 最小PHP
- QOJ #8673. 最短路徑
- 最短路徑演算法演算法
- 最短路徑(dijkstra 與 Floyd)
- 矩陣求最短路徑矩陣
- 自動走迷宮小遊戲~遊戲
- [SDOI2012] 走迷宮 題解
- UOJ #810. 【UNR #7】位元迷宮
- 藍橋杯-迷宮(BFS+DFS)
- PHP 解迷宮之 G + H 最小PHP