一、題目(poj 3984)
給出乙個只有0和1組成的5x5的矩陣表示乙個迷宮,其中的1表示牆壁,0表示可以走的路,只能橫著走或豎著走,不能斜著走,要求程式設計序找出從左上角到右下角的最短路線。
二、解題思路
迷宮問題中的最短路多用bfs,由於要輸出最短路,一般可以在更新時儲存前驅節點,這裡使用dfs從終點尋找距離一次減一的節點,直到到達起點。
三、**實現
1 #include2 #include3 #include4 #include5 #include6using
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 行,每行...