Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c3e9c17

Browse files
committed
Update Stack-DFS.py
1 parent 9c0b7be commit c3e9c17

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

Templates/03.Stack/Stack-DFS.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,26 @@ def dfs_recursive(graph, start, visited):
88
dfs_recursive(graph, end, visited)
99

1010
def dfs_stack(graph, start):
11-
visited = set(start)
12-
stack = [start]
13-
11+
print(start) # 访问节点 start
12+
visited = set(start) # 使用 visited 标记访问过的节点,先标记 start
13+
stack = [start] # 创建一个栈,并将 start 加入栈中
14+
1415
while stack:
15-
node_u = stack.pop()
16-
# 访问节点
17-
print(node_u)
18-
for node_v in graph[node_u]:
19-
if node_v not in visited:
20-
stack.append(node_v)
21-
visited.add(node_v)
16+
node_u = stack[-1] # 取栈顶元素
17+
18+
i = 0
19+
while i < len(graph[node_u]): # 遍历栈顶元素,遇到未访问节点,访问节点并跳出。
20+
node_v = graph[node_u][i]
21+
22+
if node_v not in visited: # node_v 未访问过
23+
print(node_v) # 访问节点 node_v
24+
stack.append(node_v) # 将 node_v 加入栈中
25+
visited.add(node_v) # 标记为访问过 node_v
26+
break
27+
i += 1
2228

29+
if i == len(graph[node_u ]): # node_u 相邻的节点都访问结束了,弹出 node_u
30+
stack.pop()
2331

2432
graph = {
2533
"A": ["B", "C"],
@@ -31,8 +39,8 @@ def dfs_stack(graph, start):
3139
}
3240

3341
# 基于递归实现的深度优先搜索
34-
visited = set()
35-
dfs_recursive(graph, "A", visited)
42+
#visited = set()
43+
#dfs_recursive(graph, "A", visited)
3644

3745

3846
# 基于堆栈实现的深度优先搜索

0 commit comments

Comments
 (0)