1.题目描述:有一个n*m的网格,从(0,0)出发,每一步可以朝着上下左右4个方向等概率地移动,另外一些格子中有石头,因此无法移动到这些格子,求第一次到达(n-1,m-1)格子的期望步数。可以保证至少存在一条从(0,0)到(n-1,m-1)的路径。
范围:2<=n,m<=10
样例:
Input
3 10
.#...#...#
.#.#.#.#.#
...#...#..
Output
361.00000000
2.解题思路:不妨设E(x,y)表示从(x,y)出发,到终点的期望步数,那么根据期望的线性性质和全期望公式,可以得到如下方程。
E(x,y)=0.25*E(x-1,y)+0.25*E(x+1,y)+0.25*E(x,y-1)+0.25*E(x,y+1)+1;
上述方程通过移项可以变成下式:
4*E(x,y)-E(x-1,y)-E(x+1,y)-E(x,y-1)-E(x,y+1)=4;
E(n-1,m-1)=0;
为了使得方程具有唯一解,我们令所有含有石头的格子和无法到达终点的格子都有E(x,y)=0。把这些方程联立,就可以求出最终的期望步数了。注意:建立矩阵的时候,要把二维先化成一维:(x,y)->x*m+y ,这样,便得到了一个n*m阶的系数矩阵。
3.代码:
#include<iostream>
#inc