※別途質問した内容と用いるコードは同じものですが、質問の内容が異なる為改めて質問を立てさせて頂きます。
#質問
深さ優先探索によって迷路のスタートからゴールまでの手順を調べる関数を作っていました。迷路リストは障壁が9, 未踏部分が0, ゴールが1, 既に踏んだ部分は2としています、参考にしている本では、以下のようなコードが示されています:
Python
1maze = [ 2 [9, 9, 9, 9, 9, 9], 3 [9, 0, 0, 0, 0, 9], 4 [9, 0, 0, 0, 0, 9], 5 [9, 0, 0, 0, 0, 9], 6 [9, 0, 1, 0, 0, 9], 7 [9, 9, 9, 9, 9, 9] 8] 9 10 11def dfs(x, y, d): 12 if maze[x][y] == 1: 13 print(d) 14 exit() 15 16 maze[x][y] = 2 17 18 if maze[x - 1][y] < 2: 19 dfs(x - 1, y, d + 1) 20 if maze[x + 1][y] < 2: 21 dfs(x + 1, y, d + 1) 22 if maze[x][y - 1] < 2: 23 dfs(x, y - 1, d + 1) 24 if maze[x][y + 1] < 2: 25 dfs(x, y + 1, d + 1) 26 27 maze[x][y] = 0 28 29 30dfs(1, 1, 0)
ここで、求められた返り値が必要になった為、
Python
1maze = [ 2 [9, 9, 9, 9, 9, 9], 3 [9, 0, 0, 0, 0, 9], 4 [9, 0, 0, 0, 0, 9], 5 [9, 0, 0, 0, 0, 9], 6 [9, 0, 1, 0, 0, 9], 7 [9, 9, 9, 9, 9, 9] 8] 9 10 11def dfs(x, y, d): 12 if maze[x][y] == 1: 13 return d 14 15 maze[x][y] = 2 16 17 if maze[x - 1][y] < 2: 18 dfs(x - 1, y, d + 1) 19 if maze[x + 1][y] < 2: 20 dfs(x + 1, y, d + 1) 21 if maze[x][y - 1] < 2: 22 dfs(x, y - 1, d + 1) 23 if maze[x][y + 1] < 2: 24 dfs(x, y + 1, d + 1) 25 26 maze[x][y] = 0 27 28 29depth = dfs(1, 1, 0) 30print(depth)
としたのですが、こうするとどのような迷路に対しても None が出力されます。
どのような理由で求められた値がprintをreturnにしただけでNoneになってしまったのでしょうか。おそらく大変初歩的な質問とは存じ上げますが、何卒ご教授のほどよろしくお願い申し上げます。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/13 02:06
2021/07/13 02:43
2021/07/13 02:59
2021/07/13 10:24