前提・実現したいこと
プログラミングの学習課題で再帰関数とバックトラック法を学ぶために簡単な迷路問題のコードを読んでいます。
ソースコードはすでに出来上がったものでちゃんとゴールまでのルートを表示してくれます。
しかし、「バックトラックしたあとに一度訪問したノードにまた進んでしまわないのか?」という疑問が生まれ、なかなかスッキリと解消できる説明が思い浮かびません。学習はじめたばかりの初歩の初歩的な質問で恐縮ですが、どなたか解説いただけると幸いです。
もし言葉足らずだったり、不足している情報があったらご指摘ください。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
ソースコード
#迷路 maze= [[".",".",".","."] ,[".","x","x","x"] ,[".",".",".","x"] ,["x","x",".","."]] #迷路を表示 def print_maze(maze): for raw in maze: raw_print="" for value in raw: raw_print+= value + "" print (raw_print) #本題の迷路を解く関数(再帰関数とバックトラック) def solve_maze_helper(maze,sol,pos_row,pos_col): num_row=len(maze) num_col=len(maze[0]) #Base Case if pos_row==num_row-1 and pos_col==num_col-1: return sol if pos_row>=num_row or pos_col>=num_col: return None if maze[pos_row][pos_col]=='x': return None #Recursive Case #右に進む sol.append("r") sol_going_right=solve_maze_helper(maze,sol,pos_row,pos_col+1) if sol_going_right is not None: return sol_going_right #右にいけない>バックトラック>下に進む sol.pop() sol.append("d") sol_going_down=solve_maze_helper(maze,sol,pos_row+1,pos_col) if sol_going_down is not None: return sol_going_down #解なし>バックトラック sol.pop() return None
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー