#P1007. 量子迷宫:时空回廊的悖论

量子迷宫:时空回廊的悖论

题目背景

在 3024 年,人类已经掌握了量子计算技术,并成功构建了第一个「量子迷宫」——一种基于量子叠加态的时空结构。该迷宫由无数个「量子单元」构成,每个单元可以同时处于多个状态(即「量子叠加态」),只有通过特定的「观测协议」才能坍缩为确定状态。

然而,由于量子纠缠效应,迷宫的路径会随时间动态变化,甚至可能出现「时空悖论」——某些路径会在观测后消失,而某些路径会在未被观测时自发形成。科学家们发现,这个迷宫的核心区域藏有「量子奇点」,它可能是人类突破光速限制的关键。

为了探索这个迷宫,「量子计算管理局」(QCA)训练了一批「量子探员」,他们配备了「量子观测仪」,可以在迷宫中执行「路径坍缩」操作,以稳定部分路径。但每次观测都会消耗能量,并且可能引发「量子退相干」,导致迷宫结构进一步混乱。

现在,你作为 QCA 的首席算法工程师,需要编写一个程序,计算在给定「量子迷宫」的初始状态下,探员如何以最少的观测次数找到通往「量子奇点」的最短路径。

题目描述

给定一个 n × m 的「量子迷宫」,每个单元格 G[i][j] 可以是以下状态之一:

'0':表示该单元格处于「基态」,探员可以自由通行。

'1':表示该单元格处于「激发态」,探员必须执行「观测」才能坍缩为 '0',否则无法通行。

'#':表示「量子壁垒」,探员无法通行。

'S':表示探员的「起始位置」(唯一)。

'T':表示「量子奇点」(唯一)。

探员每移动一步(上下左右)需要 1 单位时间。如果探员进入 '1' 单元格,必须花费 1 单位时间执行「观测」,使其坍缩为 '0'(此后该单元格永久变为 '0')。

你的任务是计算:

最少需要多少次观测才能从 'S' 到达 'T'?

在最少观测的前提下,最短的移动时间是多少?

如果无法到达 'T',输出 -1。

输入格式

第一行两个整数 n, m,表示迷宫的行数和列数。

接下来 n 行,每行一个长度为 m 的字符串,表示迷宫的地图。

保证 'S' 和 'T' 各出现一次。

输出格式

如果可达,输出两个整数 观测次数 和 移动时间,用空格隔开。

如果不可达,输出 -1。

输入输出样例 #1

输入 #1

5 5
S0010
11110
00100
11100
0000T

输出 #1

2 8

输入输出样例 #2

输入 #2

3 3
S11
111
11T

输出 #2

-1

说明/提示

样例解释 1

最优路径:S → (1,2) → (1,3) → (2,3) → (3,3) → (4,3) → (4,4) → (4,5) → T

观测点:(1,2) 和 (2,3)(共 2 次观测)。

移动时间:8 步(包括观测时间)。

样例解释 2

无论怎么观测,都无法到达 'T'(被 '#' 阻挡)。

数据范围

对于30%的数据,n,m10n,m \le 10
对于另外40%的数据,n,m50n,m \le 50
对于100%的数据,n,m100n,m \le 100