网格上的机器人:想象一个机器人坐在有r行c列的网格的左上角。这个机器人只能在两个方向移动,向右和向下。有些格子是关闭的,机器人不能移动到这些格子上。设计一个找到一条让机器人从左上角移动到右下角路径的算法。
这里假设有个4X4的网格,有2个带有阴影的格子是关闭的。
算法的思想如下:
从右下角进行回溯,反向寻找路径,直到左上角
1.如果当前格子是左上角,结束返回
2.如果当前格子左边的格子是开放的,把“向右”这条路径保存到栈里面
3.如果当前格子上面的格子是开放的,把“向下”这条路径保存到栈里面
4.如果当前格子左边和上面都是封闭的,删掉栈顶的一条路径并回溯
算法的Python代码实现如下:
row, col = 4, 4a = [[0 for x in xrange(col)] for y in xrange(row)]a[1][0] = 1a[2][2] = 1r = []def f(m,n): if m==0 and n==0: return if a[m][n-1]==0 and n>=1: r.append("right") return f(m,n-1) if a[m-1][n]==0 and m>=1: r.append("down") return f(m-1,n) if m==0 and a[m][n-1]==1: a[m][n]=1 del r[len(r)-1] if n==(col-1): return f(m+1, n) else: return f(m, n+1) if n==0 and a[m-1][n]==1: a[m][n]=1 del r[len(r)-1] if m==(row-1): return f(m, n+1) else: return f(m+1, n)f(row-1, col-1)r.reverse()PRint r运行结果是:['right', 'down', 'down', 'down', 'right', 'right'][Finished in 0.1s]
新闻热点
疑难解答