程式設計競賽 G 題 逃離迷宮

2022-09-23 23:03:23 字數 1012 閱讀 3838

思路:一開始從起點開始bfs搜,每搜到一把鑰匙對應的k[i][j]的值更新為起點到該鑰匙的距離,沒有搜到的鑰匙則為初始值-1。然後再從終點開始一次bfs,搜到一把鑰匙之後,先判斷k[i][j]是否為-1,是的話說明無法從起點走到該鑰匙位置,即通過這把鑰匙從起點到終點是不可行的,那麼繼續向該位置的4個方向搜尋,否的話說明從起點走到這把鑰匙是有路的,且路長度存在k[i][j]裡,那麼k[i][j]+now.step就是從起點出發拿到這把鑰匙到終點的最短路徑,那麼更新ans值為ans原本的值和k[i][j]+now.step之間的最小值,然後繼續向4個方向搜尋#include

#include

#include

#include

using namespace std;

const double eps = 1e-8;

const int inf = 0x3f3f3f3f;

const int maxn = 5e2 + 5;

int g[maxn][maxn];

int v[maxn][maxn];

int k[maxn][maxn];

int px, py, ex, ey;

int ans;

int n, m;

int d[5][2] =

;struct node

;bool judge(int x, int y)

void bfs(int x, int y, int flag)

else }

for (int i = 1; i < 5; i++) }

}}int main()

} }ans = inf;

g[ex][ey] = 0;

bfs(px, py, 0);

g[ex][ey] = 1;

bfs(ex, ey, 1);

if (ans == inf)

printf("no solution\n");

else

cout << ans << endl;

}}

程式設計題走迷宮 C 程式演算法題 迷宮(一)

題目 一天蒜頭君掉進了乙個迷宮裡面,蒜頭君想逃出去,可憐的蒜頭君連迷宮是否有能逃出去的路都不知道。看在蒜頭君這麼可憐的份上,就請聰明的你告訴蒜頭君是否有可以逃出去的路。輸入格式 第一行輸入兩個整數 n和 m,表示這是乙個 n m的迷宮。接下來的輸入乙個 n行 m列的迷宮。其中 s 表示蒜頭君的位置,...

挑戰程式設計競賽(水題打卡)

一 題目 有n根棍子,棍子i的長度為ai。想要從中選出三根棍子,使其構成的三角形的周長最大。請輸出最大的周長,如果無法構成三角形,則輸出0。二 解法 1 思路 首先根據長度排序 假設從小到大 貪心的選取 從大到小的遍歷 如果與前兩根構成三角形,則跳出迴圈。正確性 如果一根棍子與前兩個都不能構成三角形...

挑戰程式設計競賽 2 1迷宮的最短路徑

迷宮的最短路徑 給定乙個大小為n m 的迷宮,迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四個格的通道移動。請求出從起點到終點所需要的最小步數,請注意,本體假設從起點一定可以移動到終點。限制條件 n,m 100 輸入 s g 輸出 include include using namespace ...