DFS
DFS
アルゴリズム#アルゴリズム#
頂点vへのアクセスを開始することにした.
正犯vに隣接する頂点にあります.
未アクセスの頂点wがある場合は、頂点vをスタックにプッシュして頂点wにアクセスする.
そしてwをvとして、再び2回目を繰り返す.
未アクセスの頂点がない場合は、スタックをポップアップして受信した最後のアクセス頂点をvに設定し、2番目を繰り返してナビゲーション方向を変更します.
スタックが空になるまで2)繰り返します.
DFSベース
input_str = "1, 2, 1, 3, 2, 4, 2, 5, 4, 6, 5, 6, 6, 7, 3, 7"
lst = list(map(int,input_str.split(", ")))
grid = [[0]*8 for _ in range(8)]
# 1
from collections import defaultdict
# 그래프 만들기
graph = defaultdict(list)
for i in range(0, len(lst), 2):
a = lst[i]
b = lst[i+1]
grid[a][b] = 1
grid[b][a] = 1
graph[a].append(b)
graph[b].append(a)
from pprint import pprint
# pprint(grid)
# pprint(graph)
stack = []
visited = []
print(i)
stack.append(1)
visited.append(1)
while stack:
tmp = stack[-1]
for node in range(1,8): # 7 : node의 개수 1 ~ 7
if grid[tmp][node] == 1 and node not in visited:
stack.append(node)
visited.append(node)
break
else:
stack.pop()
# for value in graph[tmp]:
# if value not in visited:
# stack.append(value)
# visited.append(value)
# break
# else:
# stack.pop()
print(visited)
DFS再帰
input_str = "1, 2, 1, 3, 2, 4, 2, 5, 4, 6, 5, 6, 6, 7, 3, 7"
lst = list(map(int,input_str.split(", ")))
grid = [[0]*8 for _ in range(8)]
for i in range(0, len(lst), 2):
a = lst[i]
b = lst[i+1]
grid[a][b] = 1
grid[b][a] = 1
from collections import defaultdict
graph = defaultdict(list)
for i in range(0, len(lst), 2):
a = lst[i]
b = lst[i+1]
graph[a].append(b)
graph[b].append(a)
from pprint import pprint
stack = []
visited = []
stack.append(1)
visited.append(1)
cnt = 0
while stack:
cnt += 1
tmp = stack[-1]
for node in graph[tmp]:
if node not in visited:
stack.append(node)
visited.append(node)
break
else:
stack.pop()
print(visited)
print(cnt)
visited = []
for i in range(0, len(lst), 2):
a = lst[i]
b = lst[i+1]
graph[a].append(b)
graph[b].append(a)
def func(tmp):
visited.append(tmp)
for node in graph[tmp]:
if node not in visited:
# visited.append(node)
func(node)
func(1)
print(visited)
Reference
この問題について(DFS), 我々は、より多くの情報をここで見つけました https://velog.io/@holawan/DFSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol