POJ拯救行動

2021-10-03 22:08:47 字數 983 閱讀 1589

當各個節點的權重一樣的時候,最小代價的路徑=最短距離路徑。可以把bfs理解為每次擴張一圈,只要記錄每個節點在第幾圈即可,與具體怎麼從乙個圈到達另乙個圈的路徑無關。

解法一:bfs+優先佇列

當每個節點權重不一樣時,要想使每個節點的代價最小,只要保證所有能到達它的節點的代價都是最小的,並從中選擇最小的那個用來確定它的代價即可。

bfs+優先佇列中,每次出隊的時候,出隊元素的代價都是全域性最小的,因為之**隊節點的代價一定大於當前佇列中所有節點的代價,而每次出隊的又都是當前佇列中代價最小的元素。節點出隊時,會更新所有與它相鄰節點的代價,全域性最小代價一定滿足上述的條件。所以每個節點的代價都是最小的。

//優先佇列

#include

using

namespace std;

const

int maxn =

205;

char mp[maxn]

[maxn]

;int n, m, spt[maxn]

[maxn]

;int dir[

2]=,

,,};

struct node

friend

bool

operator

<

(node a,node b)};

intbfs

(int x,

int y,

int x_,

int y_)}}

return-1

;}intmain()

}int ans =

bfs(sx, sy, ex, ey);if

(~ans)

printf

("%d\n"

, ans)

;else

printf

("impossible\n");

}return0;

}

openjudge 拯救行動

描述 公主被惡人抓走,被關押在牢房的某個地方。牢房用n m n,m 200 的矩陣來表示。矩陣中的每項可以代表道路 牆壁 和守衛 x 英勇的騎士 r 決定孤身一人去拯救公主 a 我們假設拯救成功的表示是 騎士到達了公主所在的位置 由於在通往公主所在位置的道路中可能遇到守衛,騎士一旦遇到守衛,必須殺死...

openjudge 拯救行動

總時間限制 10000ms 記憶體限制 65536kb 描述 公主被惡人抓走,被關押在牢房的某個地方。牢房用n m n,m 200 的矩陣來表示。矩陣中的每項可以代表道路 牆壁 和守衛 x 英勇的騎士 r 決定孤身一人去拯救公主 a 我們假設拯救成功的表示是 騎士到達了公主所在的位置 由於在通往公主...

百練 4116 拯救行動

總時間限制 1000ms 記憶體限制 65536kb 描述公主被惡人抓走,被關押在牢房的某個地方。牢房用n m n,m 200 的矩陣來表示。矩陣中的每項可以代表道路 牆壁 和守衛 x 英勇的騎士 r 決定孤身一人去拯救公主 a 我們假設拯救成功的表示是 騎士到達了公主所在的位置 由於在通往公主所在...