網格上的機器人:想象一個機器人坐在有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]
新聞熱點
疑難解答