時間限制: 1 sec
記憶體限制: 128 mb [
提交][
狀態][
討論版]
公主被妖怪抓到了乙個山洞裡,為了盡快營救公主,王子決定不回城搬救兵去獨自營救。山洞為矩形且十分空曠,其中生活著k個妖怪。幸運的是這些妖怪晚上都會睡覺並且沒人守夜。但是若是離妖怪太近就會驚醒它,其他的妖怪也會被驚醒,所以我們要找一條距離所有妖怪都很遠的路。我們把山洞分為了n*m個格仔,走到相鄰的格仔(不含對角)王子需要一步,妖怪只佔乙個格仔的大小。王子希望你給他一條盡可能安全的路,你只需要告訴他,這條路上離妖怪最近的時候距離是多少(最少走k步可到則認為最近距離為k)。入口在1行1列,公主在n行m列。
n,m,k(地圖為n行*m列,k為妖怪個數)(1
之後有k行每行兩個數xi,yi(表示妖怪在xi行,yi列)
離妖怪最近的距離
3 3 21 33 1
1離妖怪最近的距離
注意:走到哪個位置就計算到每個妖怪的距離,並取最小值,取這條路徑上的最小值的最大距離並輸出結果
#include#include#include#include#includeusing namespace std;
#define min(x,y) (x=1 && i<=n && j>=1 && j<=m && map[i][j]) return true;
else return false;}
int huan(int s,int d)
if(vis[now2.x][now2.y])
for(int i=0;i<4;i++)
tmp2.x=now2.x+c[i][0];
tmp2.y=now2.y+c[i][1];
tmp2.v=min(huan(tmp2.x,tmp2.y),now2.v);
if(check(tmp2.x,tmp2.y) && !vis2[tmp2.x][tmp2.y])}}
if(dd==1)
else if(dd==2)
else return 0;}
int main()
printf("%d\n",bfs(1,1));
}return 0;
}
執行時間為 : 420 ms
多給幾組測試資料:
(1):1000 1000 10
161 203
85 591
494 633
563 935
517 722
595 363
989 174
448 825
902 939
430 386
輸出為:98
(2)1000 1000 10
732 474
449 988
119 239
306 233
258 268
627 992
225 792
237 601
72 361
1 951
輸出為:232
雙向搜尋 DP 拯救公主(二)
時間限制 1 sec 記憶體限制 128 mb 提交 狀態 討論版 公主被妖怪抓到了乙個山洞裡,為了盡快營救公主,王子決定不回城搬救兵去獨自營救。山洞為矩形且十分空曠,其中生活著k個妖怪。幸運的是這些妖怪晚上都會睡覺並且沒人守夜。但是若是離妖怪太近就會驚醒它,其他的妖怪也會被驚醒,所以我們要找一條距...
廣度優先搜尋尋找最優路徑 以及雙向廣度搜尋演算法
這裡是poj1915上的一道在棋盤上搜尋走步路徑的題目 如下 使用bfs 通過這道題目我有如下的幾點總結 1 一開始我通過struct結構來表示每一步到達的座標位置,其中設定了乙個struct parent的指標,而不是改進後的int parent 但是在實際的除錯過程中,出現了非常奇怪的現象,被壓...
雙向廣度優先搜尋演算法
首先是廣度優先搜尋演算法 初始化visited陣列,將所有點的值設為false visited陣列用來儲存所有點的訪問情況 visited start true start為起始點 queuesearch 用來儲存待搜尋點的佇列 search.push start while search.empt...