백준 1260 파이썬 DFS와 BFS를 구현할 수 있는가

2024. 5. 16. 06:45코딩/백준

반응형

백준 1260 - DFS와 BFS

문제

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

1260

 

답안 코드 :

from collections import deque

N, M, Start = map(int, input().split())
A = [[] for _ in range(N + 1)]

for _ in range(M):
    s, e = map(int, input().split())
    A[s].append(e)  # 양방향 에지이므로 양쪽에 에지를 더하기
    A[e].append(s)

for i in range(N + 1):
    A[i].sort()  # 번호가 작은 노드 부터 방문하기 위해 정렬하기

visited = [False] * (N + 1)


def DFS(v):
    print(v, end=' ')
    visited[v] = True
   
    for i in A[v]:
        if not visited[i]:
            DFS(i)


DFS(Start)

visited = [False] * (N + 1)  # 리스트 초기화


def BFS(v):
    queue = deque()
    queue.append(v)
    visited[v] = True
   
    while queue:
        now_Node = queue.popleft()
        print(now_Node, end=' ')
       
        for i in A[now_Node]:
            if not visited[i]:
                visited[i] = True
                queue.append(i)

print()
BFS(Start)

 

생각 :

# 문제 분석
# DFS와 BFS를 구현할 수 있는가

# 문제 풀이
# 인접 리스트에 그래프를 저장

# DFS를 실행하면서 방문 리스트 체크 + 탐색 노드 기록
# 문제 조건에서 작은 번호의 노드부터 탐색
# 따라서 인접 노드를 오름차순 정렬 후 재귀함수 호출!

# 그리고 BFS도 같은 방식

 

탐색 알고리즘 정리 블로그

https://mkisos.tistory.com/entry/%ED%83%90%EC%83%89-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%A0%95%EB%A6%AC

 

탐색 알고리즘 정리

탐색 탐색은 주어진 데이터에서 자신이 원하는 데이터를 찾아내는 알고리즘을 말한다. 주어진 데이터의 성질(정렬 데이터 또는 비정렬 데이터)에 따라 적절한 탐색 알고리즘을 선택하는 것이

mkisos.tistory.com

 

반응형