题库练习 光线追踪(rt)

A72013 | 光线追踪(rt)

来源编程题
时间限制2s
内存限制512MB
通过 / 提交0/0

题目描述

你需要实现一个“镜子迷宫光线追踪模拟器”。

给定一个 HW 列的字符矩阵表示迷宫,每个格子字符含义如下:

|:竖直镜面

-:水平镜面

\:反斜杠镜面

/:斜杠镜面

.:空地

X:光源

每个光源会同时向上、下、左、右四个方向发射光线。光线一旦走出矩阵边界就消失。

只要有任意一条光线经过某个格子,该格子就被视为“被照亮”(包括镜子格、空地格和光源格本身)。

当光线进入某个格子时,先将该格标记为被照亮,再根据格子类型改变方向:

遇到 |

从左或右射入,方向反转

从上或下射入,方向不变

遇到 -

从上或下射入,方向反转

从左或右射入,方向不变

遇到 \

上 -> 左,左 -> 上

下 -> 右,右 -> 下

遇到 /

上 -> 右,右 -> 上

下 -> 左,左 -> 下

遇到 .X:方向不变

请输出整张地图中每个位置是否最终会被照亮。

输入格式

第一行输入两个整数 H, W,表示地图行数和列数。

接下来输入 H 行,每行一个长度为 W 的字符串,表示地图。

保证输入仅包含 |-\/.X 这些合法字符。

输出格式

输出一个 HW 列的 01 矩阵。

其中第 i 行第 j 列:

1 表示该格会被照亮

0 表示该格不会被照亮

输入输出样例

输入 #1
4 5
..X..
..|..
./-\.
.....
输出 #1
11111
00100
00100
00000
输入 #2
5 6
......
.\/X..
.-|/..
..X\..
......
输出 #2
000100
001111
001100
111100
001100
C++ 编辑器
输入
输出