U574042 《暗区突围》撤离点规划

题目背景

在《暗区突围》游戏中,玩家需要从危险区域撤离,但撤离点会在不同时间开放,并且有撤离成功率。你需要帮助玩家规划最佳撤离路线。 游戏区域被表示为一个二维网格,包含以下元素: 0:安全区域,可以自由通行 1:障碍物,无法通行 2:玩家起始位置(仅有一个) 3:撤离点(可能有多个) 每个撤离点有一个开放时间 t(分钟)和成功率 p(百分比)。玩家每分钟可以移动到相邻的四个方向(上、下、左、右)的格子。只有当玩家到达撤离点的时间 大于等于 开放时间 t 时,才能尝试撤离,撤离成功的概率为 p。

题目描述

任务: 编写一个 C++ 程序,计算玩家从起始位置到各个可到达撤离点的最短路径,并确定哪一个撤离点能提供最高的成功撤离期望。

输入格式

第一行包含两个整数 n 和 m(1 ≤ n, m ≤ 100),表示网格的行数和列数。 接下来的 n 行,每行包含 m 个整数(0、1、2、3),表示网格布局。 随后一行包含整数 k(1 ≤ k ≤ 10),表示撤离点的数量。 接下来的 k 行,每行包含三个整数 x, y, t 和一个浮点数 p,表示撤离点的坐标(0-based 索引)、开放时间(分钟)和成功率(0 ≤ p ≤ 100)。输入保证这些坐标对应网格中的撤离点(值为 3)。

输出格式

如果无法到达任何撤离点,输出 "IMPOSSIBLE"。 否则,输出两个整数:选择的撤离点的索引(从 0 开始)和成功撤离的最大期望概率(四舍五入到整数百分比)。如果有多个撤离点具有相同的最高成功率,选择索引最小的撤离点。

说明/提示

代码需包含输入验证,确保输入的网格和撤离点数据有效。 处理所有边界情况,如无法到达任何撤离点。 输出格式严格遵循示例。