-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstack1_dfs1_간선.py
35 lines (31 loc) · 1.28 KB
/
stack1_dfs1_간선.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def dfs(v, N):
top = -1
visited[v] = 1 # 시작점 방문 표시
while True:
for w in adjList[v]: # if (v의 인접 정점 중 방문 안 한 정점 w가 있으면)
if visited[w] == 0:
top += 1 # push(v)
stack[top] = v
v = w # v <- w (w에 방문)
print(v) # 방문해서 할 일
visited[w] = 1 # visited[w] <- True (w에 방문 했다는 표시 남기기)
break
else: # w가 없으면
if top != -1: # 1. stack이 비어있지 않은 경우
v = stack[top]
top -= 1 # 이 2개의 행이 pop()에 해당
else: # 2. stack이 비어있는 경우
break # while 빠져나오게 만듬
T = int(input())
for test_case in range(1, T + 1):
V, E = map(int, input().split())
N = V + 1
adjList = [[] for _ in range(N)]
for _ in range(E):
a, b = map(int, input().split())
adjList[a].append(b)
adjList[b].append(a)
visited = [0] * N # visited 생성, N : 정점의 개수는 7개라는 걸 알고 주는 걸로
stack = [0] * N # stack 생성, stack에 정점이 한 번씩만 들어갔죠, append해도, append하면 간단하게 구현 가능
dfs(1, 7)
print()