1101 著火的房間 多源bfs

2021-10-02 14:19:35 字數 1546 閱讀 1022

救救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 之間的曼哈頓距離...