救救pipi!!pipi被關在乙個著火的房間裡了!
該房間中有 nxm 個位置, 用乙個字元矩陣表示。
『s』 代表pipi的起點位置。
『t』 代表出口位置。
『f』 代表房間的著火點。
『-』 代表房間還未著火的點。
房間裡面有若干個著火點,每個著火點的移動速率是k , 意思是若乙個位置在 x 時刻**了,那麼在 x+k 時刻它周圍8個方向都會**。
pipi每秒能夠移動到上下左右四個方向中的乙個未著火的位置。
請你程式設計計算可憐的pipi能否成功逃離這個房間,如果pipi能夠成功逃離這個房間,輸出pipi逃出房間的最短時間,如果pipi不能逃出這個房間,輸出"impossible"。
輸入包含多組測試用例。
對於每一組測試用例,輸入第一行包含三個整數 n,m,k .分別代表房間位置的行數,列數,以及著火點的移動速率。(1<=n,m,k<=100)
接下來輸入乙個n*m的字元矩陣,代表房間在0時刻的狀態。
以0 0 0 代表輸入結束。
對於每組樣例,輸出一行。如果pipi能夠成功逃離這個房間,輸出pipi逃出房間的最短時間,如果pipi不能逃出這個房間,輸出"impossible"。
2 2 1
stf-
2 2 2
stf-
0 0 0
4impossible
impossible
1
#include
using
namespace std;
int n,m,k,s1,s2;
const
int inf=
1e9;
const
int n=
105;
char maze[n]
[n];
int dir[
2]=;
int firetime[n]
[n];
int vis[n]
[n];
struct node
;void
getfiretime()
);firetime[i]
[j]=0;
}else
firetime[i]
[j]=inf;
if(maze[i]
[j]==
's')
s1=i,s2=j;}}
while
(q.size()
)); firetime[newx]
[newy]
=top.t+k;}}
}void
bfs())
; vis[s1]
[s2]=1
;while
(q.size()
) q.
pop();
for(
int i=
0;i<
4;i++))
;}}printf
("impossible\n");
}main()
}
矩陣距離 多源BFS
給定乙個n行m列的01矩陣a,a i j 與 a k l 之間的曼哈頓距離定義為 dist a i j a k l i k j l dist a i j a k l i k j l 輸出乙個n行m列的整數矩陣b,其中 b i j min1 x n,1 y m,a x y 1dist a i j a ...
矩陣距離(多源BFS)
題目描述 給定乙個n行m列的01矩陣a,a i j 與 a k l 之間的曼哈頓距離定義為 dist a i j a k l i k j l 輸出乙個n行m列的整數矩陣b,其中 b i j min1 x n,1 y m,a x y 1dist a i j a x y 輸入格式 第一行兩個整數n,m。...
演算法競賽 多源BFS
多源bfs與單源bfs有什麼區別呢?如何解決多源bfs?多源bfs 多個起點 多個起點同時加入佇列!核心 在求解多源bfs問題時,同時將所有起點加入佇列即可!題目鏈結 173.矩陣距離 acwing題庫 給定乙個 nn 行 mm 列的 0101 矩陣 aa,a i j 與a k l 之間的曼哈頓距離...