13年10月 月赛第一场 set 4 迷宫问题

时间:2021-10-15 20:31:13

题目

给定一个n*m的迷宫,如
S..
..#
E.E
其中,S代表开始位置,#代表不可行走的墙,E代表出口。
主人公从开始位置出发,每次等概率的随机选择下一个可以行走的位置(可能会发生回溯),直到到达某一个出口为止。
现在他想知道,在这一概率事件中,它从开始位置走到某一个出口的期望步数是多少。

思路

1. 期望 E = p1 * step1 + p2 * step2 +... pn * stepn

2. 因为可能会发生回溯, 因此直接使用 dfs 并不靠谱

3. 那么考虑 dp[i][j], dp[i][j] 表示到达终点的期望, 是否可行呢? 在题目描述给出的例子中, dp[2][1] = 1/3*1 + 1/3*1 + dp[1][1]*1/3; 而 dp[1][1] = ... + dp[2][1]*1/3;

这就造成了死锁. 但机器学习似乎用过这个技术

4. 正解. (3) 已经很接近了, 但完全没想到高斯消元. 把每一个格子看成一个点, 假设 dp[1][1] 表示上图中中间那个点的期望, 那么 dp[1][1] = 1 + 1/3*dp[1][0] + 1/3...

一共 n*m -k 个未知数, 且有 n*m-k 个方程, 因此联立消元可得结果

另外, 需要先使用一把 bfs, 将不能到达的设为 -1, E 设为 0.