第五次訓練 G題

2021-09-10 05:04:44 字數 890 閱讀 8975

問題簡述:

森林中j可向四個方向移動,同時火源向四個方向擴散,當j逃到地圖外則視作成功逃離,問j能否逃離森林,若能,輸出最短時間。

問題分析:

由最短路徑可知,需要用到bfs。除了人外,森林中還有火源會隨著人移動不斷向四處擴散,則只需用兩次bfs即可。第乙個bfs模擬火源的移動,將火源擴散到每個方格時的最短時間記錄下來,用於第二次人移動時的邊境判斷即可。若火源到達該方塊的時間更早,則不能移動。

程式說明:

注意該題中可能有多個火源(這裡wa了無!數!次),所以在第乙個bfs使用時需要先將所有火源的位置壓入佇列,以便求得火源到達該方塊時的最短路徑。

#include#include#include#include#include#include#include#includeusing namespace std;

int fire[1005][1005];

bool vis[1005][1005];

char map[1005][1005];

int dir[4][2]=;

int r,c;

struct node;

bool edge(int x,int y)

for(int i=0;i<4;i++)

}else

}} }

return -1;

}int main()

}} memset(vis,0,sizeof(vis));

memset(fire,0,sizeof(fire));

bfsf();

memset(vis,0,sizeof(vis));

int ans=bfs(jx,jy);

if(ans>=0)

else

}}

第五次實驗

一 問題及 檔名稱 陣列素數排序.cpp 作 者 周玉傑 完成日期 2017 年 4 月 24 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 無 問題描述 程式輸出 問題分析 使用函式來分工 演算法設計 無 include include using namespace std c...

第五次實驗

一 問題及 檔名稱 ex5 1 作 者 謝萍 完成日期 2017年 5月 5 日 版 本 號 v1.0 輸入描述 十個整數 問題描述 從鍵盤中輸入10個數放在陣列a中,將該陣列中奇數放到陣列b,偶數放到陣列c中後分別輸出。程式輸出 陣列中的奇數和偶數 問題分析 先輸入陣列,在進行判斷,最後輸出 演算...

第五次作業

一 問題及 include using namespace std class time void add a minute void add an hour void add seconds int n void add minutes int n void add hours int n voi...