ACM基礎 BFS入門

2021-07-10 12:04:09 字數 1196 閱讀 4814

注釋寫的很詳細哦

// 深度搜尋利用佇列走迷宮,求最短步數

// 題目大意: 有乙個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...