DFSを開く
📌ベストプラクティス(フルナビゲーション)

route = [
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1],
[1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1],
[1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1],
[1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
[1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]
s = len(route)
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
def dfs(x, y):
if route[x][y] != 0:
return
if [x, y] == [s - 1, s - 1]:
return
route[x][y] = 2 # 밟은 위치는 다시 방문 하지 않도록
for i in range(4):
dfs(x + dx[i], y + dy[i])
route[x][y] = 0 # 밟았던 길을 원래대로 복구 (다른 재귀에서 방해받지 않기 위해서)
dfs(1, 1)
📌上下左右に移動するたびに、道を踏んで修復されます。
ベストプラクティスと同様

def dfs(x, y):
if route[x][y] != 0:
return
if [x, y] == [s - 1, s - 1]:
return
for i in range(4):
route[x][y] = 2 # 밟은 위치는 다시 방문 하지 않도록
dfs(x + dx[i], y + dy[i])
route[x][y] = 0 # 밟았던 길을 원래대로 복구 (다른 재귀에서 방해받지 않기 위해서)
dfs(1, 1)
📌目的地に到着したらDFSを停止します。

finish = False
def dfs(x, y):
global finish
if finish:
return
if route[x][y] != 0:
return
if [x, y] == [s - 1, s - 1]:
finish = True
return
route[x][y] = 2 # 밟은 위치는 다시 방문 하지 않도록
for i in range(4):
dfs(x + dx[i], y + dy[i])
route[x][y] = 0 # 밟았던 길을 원래대로 복구 (다른 재귀에서 방해받지 않기 위해서)
dfs(1, 1)
宛先に到着するとdfsは実行されないため、スタックに新しい関数は蓄積されません.最終的には、スタックに存在するすべての関数がポップアップされ、ナビゲーションが終了します.
📌あなたが踏んだ道を修復しなければ

def dfs(x, y):
if route[x][y] != 0: # 빈칸이 아니면 탐색을 멈춘다
return
if [x, y] == [s - 1, s - 1]:
return
route[x][y] = 2 # 밟은 위치는 다시 방문 하지 않도록
for i in range(4):
dfs(x + dx[i], y + dy[i])
# route[x][y] = 0 # 밟았던 길을 원래대로 복구 (다른 재귀에서 방해받지 않기 위해서)
dfs(1, 1)
1つのケースで探索を行い、その道を回復しなければ、次のcaseをブラウズするときは、前のcaseで歩いた道をブラウズしません(
if route[x][y] != 0:
)📌踏んだ道をチェックしないと

def dfs(x, y):
if route[x][y] != 0: # 빈칸이 아니면 탐색을 멈춘다
return
if [x, y] == [s - 1, s - 1]:
return
# route[x][y] = 2 # 밟은 위치는 다시 방문 하지 않도록
for i in range(4):
dfs(x + dx[i], y + dy[i])
# route[x][y] = 0 # 밟았던 길을 원래대로 복구 (다른 재귀에서 방해받지 않기 위해서)
dfs(1, 1)
無限ループに陥る.Reference
この問題について(DFSを開く), 我々は、より多くの情報をここで見つけました https://velog.io/@guswns3371/DFS-뜯어보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol