题目:有一个正方形的岛,用二维方形矩阵表示。岛上有一个醉汉,每一步可以往上下左右四个方向之一移动一个。如果超出矩阵他就死了。假设每一步方向的选择是随机的,请计算n步后他还活着的概率。
例如:
输入矩阵大小2X2,起点(0,0),n=1 输出0.5
输入矩阵大小3X3,起点(1,1),n=1 输出1
输入矩阵大小3X3,起点(0,0),n=1 输出0.375
解题的思路:(先放上文字版的,等之后忙完了再放上图解)
利用广度优先的算法穷举了所有可能的路径,并将可存活的点压入队列中。其中只要发现坐标超过表盘的要求则直接舍弃。
因此队列中最后留下的最后成功路径最后的落脚点。只需要计算最后成功的次数。
所有的次数=4**N
概率=成功的次数/所有的次数
题目中"只要一出去就死的意思":其实转化为遍历的判断条件:在任意过程中坐标(x,y)中的xy值都必须要>0且小于N
避免的情况比如:
醉汉从(0,0)→(-1,0)→(0,0)的情况。
import collections
def how_likely_alive(m, n, i, j,N): #m,n大小,ij起步位置,N步数
Deque1 = collections.deque([])
Deque1.append((i,j,0))
while(True):
x, y, step = Deque1.popleft()
if step==N:break
if x-1&g