你需要实现一个“镜子迷宫光线追踪模拟器”。
给定一个 H 行 W 列的字符矩阵表示迷宫,每个格子字符含义如下:
|:竖直镜面
-:水平镜面
\:反斜杠镜面
/:斜杠镜面
.:空地
X:光源
每个光源会同时向上、下、左、右四个方向发射光线。光线一旦走出矩阵边界就消失。
只要有任意一条光线经过某个格子,该格子就被视为“被照亮”(包括镜子格、空地格和光源格本身)。

当光线进入某个格子时,先将该格标记为被照亮,再根据格子类型改变方向:
遇到 |:
从左或右射入,方向反转
从上或下射入,方向不变
遇到 -:
从上或下射入,方向反转
从左或右射入,方向不变
遇到 \:
上 -> 左,左 -> 上
下 -> 右,右 -> 下
遇到 /:
上 -> 右,右 -> 上
下 -> 左,左 -> 下
遇到 . 或 X:方向不变
请输出整张地图中每个位置是否最终会被照亮。
第一行输入两个整数 H, W,表示地图行数和列数。
接下来输入 H 行,每行一个长度为 W 的字符串,表示地图。
保证输入仅包含 |、-、\、/、.、X 这些合法字符。
输出一个 H 行 W 列的 01 矩阵。
其中第 i 行第 j 列:
1 表示该格会被照亮
0 表示该格不会被照亮
4 5 ..X.. ..|.. ./-\. .....
11111 00100 00100 00000
5 6 ...... .\/X.. .-|/.. ..X\.. ......
000100 001111 001100 111100 001100
样例 1 中只有一个光源,位于第 1 行第 3 列。其向左、右传播会点亮整行;向下传播经过 | 时方向不变,继续点亮第 2、3 行对应位置;向上传播越界后消失,因此得到对应的 01 矩阵。
样例 2 中有两个光源,且存在 /、\、|、- 多种镜面。按本题反射规则:/ 会把上/右互换、下/左互换,\ 会把上/左互换、下/右互换。两组光线在中部区域多次转向并发生重叠照明,最终得到上面的 01 输出矩阵。
| 数据点编号 | 数据范围 | 特殊性质 |
|---|---|---|
| 1 | H, W \leq 30 | 不存在光源 |
| 2 | H, W \leq 30 | 仅包含 ( . ) 与 ( x ) |
| 3 | H, W \leq 80 | 不存在倾斜镜面(/,\) |
| 4 | H, W \leq 80 | 不存在直镜面(\,-) |
| 5 | H, W \leq 200 | 仅存在一个光源 |
| 6 | H, W \leq 500 | 光源数量不超过 10 |
| 7 | H, W \leq 1000 | 无特殊性质 |
| 8 | H, W \leq 2000 | 镜子格占比不低于 70\% |
| 9 | H, W \leq 5000 | 存在大量环路结构 |
| 10 | H, W \leq 10000 | 无特殊性质 |
2026年常州“信息与未来”小学生编程比赛线上