《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q08)
阿新 • • 發佈:2018-12-14
《程式設計師的演算法趣題》-(日)增井敏克 , 書中為69 道數學謎題編寫了解題程式, 程式語言為:Ruby,JavaScript,C語言。有興趣的同學,可以購書閱讀~
在此更新個人編寫的Python版,僅供學習使用。(執行環境:Python3.6)
Q08 優秀的掃地機器人
假設有一款不會反覆清掃同一個地方的機器人,它只能前後左右移動。舉個例子,如果第 1 次向後移動,那麼連續移動 3 次時,就會有以下 9 種情況。又因為第 1 次移動可以是前後左右 4 種情況,所以移動 3 次時全部路徑有 9×4 = 36 種。
問題
求這個機器人移動 12 次時,有多少種移動路徑?
walk_steps = 12 directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] all_footprint = [[(0, 0)]] for i in range(walk_steps): all_new_footprint = [] while len(all_footprint) > 0: cur_footprint = all_footprint.pop() for direction in directions: next_step = (cur_footprint[-1][0] + direction[0], cur_footprint[-1][1] + direction[1]) if next_step in cur_footprint: continue else: all_new_footprint.append(cur_footprint + [next_step]) all_footprint = all_new_footprint[:] print('有%s種移動路徑' % len(all_footprint))
執行結果:
有324932種移動路徑