题意:
给出\(T\)组数据,每组数据给出\(N\)和\(M\),表示接下去\(N\)行\(M\)列。
图中“#”代表草,可以点燃;“.”点代表不能点燃;“#”和“.”都以走。
现在需要同时点两把火(位置可以重合),火的燃烧方向是上下左右,可以同时进行(注意!:不是一次只能一个方向,可以同时上下左右)。
若能烧完所有草(#),则输出最少时间,否则输出-1。
思路:
首先需要特判,如果草#的个数小于等于2的话,直接输出零(因为意味着点火的地方直接着了,无需耗费时间)。
否则,
因为是同时点燃两把火,所以相当于是双起点的BFS。
所以,我们先把草#用结构体存储起来,然后双for循环让每个草之间去进行一个BFS比较最短时间。
在BFS判断的时候,可以先让两个起点都入队,然后就是正常的BFS写法。
AC代码:
#include
#include
#include
#include
#include
#include
#include
#include