网格多源最短路
2026-10-28 · 来自《算法讲解062-必备-宽度优先遍历及其扩展》 · 手机上只能看题,答题回电脑
【题意】给定一个 n 行 m 列的网格,每个格子要么是空地(用 '.' 表示),要么是障碍(用 '#' 表示),要么是感染源(用 'S' 表示)。每一秒,所有已被感染的格子会同时把它上下左右相邻的空地格子感染。求每个格子最早被感染的时刻;若永远不会被感染(包括障碍格和无法到达的空地),输出 -1。
【输入格式】第一行两个整数 n 和 m。接下来 n 行,每行一个长度为 m 的字符串,只包含 '.'、'#'、'S'。
【输出格式】输出 n 行,每行 m 个整数,表示每个格子最早被感染的时刻;障碍格和无法被感染的空地输出 -1。
【数据范围】1 ≤ n, m ≤ 2000,n×m ≤ 4×10^6。
【样例输入】
1 2
S.
【样例输出】
0 1
提示:所有感染源在同一时刻开始扩散,可以先把它们全部作为起点。 · 扩散按层进行,每个格子第一次被到达的时刻就是最早感染时刻。
这天的还没交(手机不能交,回电脑写)