1. 程式人生 > >《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q08)

《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q08)

《程式設計師的演算法趣題》-(日)增井敏克 , 書中為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種移動路徑