注釋寫的很詳細哦
// 深度搜尋利用佇列走迷宮,求最短步數
// 題目大意: 有乙個n*m的迷宮,地圖上s代表起點,g代表終點,#代表牆無法通過,.代表路
// 求從起點到終點的最短距離,如果無法找到出口則輸出not find。
// 例如:
// input:
// 3 2
// s#g
// ...
// output
// 4
// dfs隱式的利用了棧的特點,多次遞迴與棧一樣後入先出
// 而bfs則利用佇列,先進先出的搜尋
#include #include #include #include using namespace std;
typedef pairp; // 方便
const int inf = 10000000; // 表示未訪問過的點的值
const int max_n = 100; // 最大地圖的長寬
char maze[max_n][max_n + 1]; // 模擬地圖
int n, m; // 代表n行m列
int sx, sy; // s的位置座標
int gx, gy; // g的位置座標
int d[max_n][max_n]; // 記錄當前步數,為訪問過為inf
// 代表上下左右四個方向
int dx[4] = , dy[4] = ;
int bfs();
int main()
if(maze[i][j] == 'g') // 找到結束位置
}} int ans = bfs();
if(ans == inf)
cout << "can't find " << endl;
else
cout << ans << endl;
return 0;
}// 返回(sx,sy)到(gx,gy)的最短距離
// 如果無法到達,則返回inf
int bfs()
} }// 返回終點所需的步數
return d[gx][gy];
}
逃離ACM迷宮(BFS)
題目鏈結 題目描述 如下圖所示的是乙個由程式設計題目組成的acm迷宮。迷宮的左上角是入口,右下角是出口。迷宮中每乙個格仔都有乙個程式設計題目,挑戰者要ac該題目後才能通過,大於0的數字表示ac該題目所需的最短時間。數字如果是0表示是陷阱,進去了就出不來。現在的問題是 求挑戰者從入口到出口所需的最短時...
一道bfs廣搜的ACM競賽入門題
農夫知道一頭牛的位置,想要抓住它。農夫和牛都於數軸上 農夫起始位於點 n 0 n 100000 牛位於點 k 0 k 100000 農夫有兩種移動方式 1 從 x移動到 x 1或x 1 每次移動花費一分鐘 2 從 x移動到 2 x 每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。最少要...
ACM演算法入門
oj上的一些水題 可用來練手和增加自信 poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094 初期 一.基本演算法 1 列舉.poj1753,poj2965 2 貪心 poj1328,poj2109,poj25...