DFS 개념 & 풀이 - 2606

LEE'S·2023년 7월 21일
0

백준

목록 보기
17/27

✏️ DFS 알고리즘

import sys

graph = [
    [],
    [2,3,8], # 1번 노드와 연결
    [1,7], # 2번 노드와 연결
    [1,4,5], 
    [3,5],
    [3,4],
    [7],
    [2,6,8],
    [1,7]
]

visited = [False] * (8+1)

def dfs (graph , v , visited) : # v : v번 노드 
  visited[v] = True  # 방문 처리 
  print(v , end=' ')
  for i in graph[v] : # 그 다음 방문할 곳을 찾기 위해서 해당 노드와 연결된 노드 확인 
    if not visited[i] : # 그 연결된 노드가 방문하지 않았던 노드라면 
      dfs(graph,i , visited) # 재귀함수 호출 


dfs(graph , 1, visited)

##### 결 과 ##### (1부터 시작)
# 1 2 7 6 8 3 4 5

👀 문제 풀이

# 2606

import sys

count = int(sys.stdin.readline())

n = int(sys.stdin.readline())

graph = [[] for _ in range(count+1)]

ans = 0

for _ in range(n) : 
    a,b = map(int, sys.stdin.readline().split()) # 1, 2
    graph[a].append(b) # 1번 노드와 2번 노드는 연결 -> 1번에 2 삽입
    graph[b].append(a) # 1번 노드와 2번 노드는 연결 -> 2번에 1 삽입
    
# graph : [ [] , [2,5] , [1,3] , [2], [7], [1,2,6], [5] , [4] ]

visited = [False] * (count+1)

def dfs(i, visited) :
    visited[i] = True
    global ans
    ans += 1
    for k in graph[i] :
        if not visited[k] :
            dfs(k,visited)

dfs(1,visited)
print(ans-1) # 이때 시작한 1은 제외해야 하므로 1 빼기 ~!!
  • 위 dfs 알고리즘 코드의 graph 의 형태와 같게 만들기
profile
기록 블로그

0개의 댓글