問題簡述:
森林中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...