백준 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

답안 코드 :
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도 같은 방식
탐색 알고리즘 정리 블로그
탐색 알고리즘 정리
탐색 탐색은 주어진 데이터에서 자신이 원하는 데이터를 찾아내는 알고리즘을 말한다. 주어진 데이터의 성질(정렬 데이터 또는 비정렬 데이터)에 따라 적절한 탐색 알고리즘을 선택하는 것이
mkisos.tistory.com
반응형
'코딩 도구 > 백준' 카테고리의 다른 글
백준 1920 파이썬 이진 탐색 O(nlogn) 시간 복잡도 (14) | 2024.05.19 |
---|---|
백준 1167 파이썬 가장 긴 경로를 찾는 방법 관련 아이디어 (28) | 2024.05.18 |
백준 13023 파이썬 DFS의 시간 복잡도 O(V+E) (1) | 2024.05.15 |
백준 2023 파이썬 DFS 재귀함수 (2) | 2024.05.14 |
백준 11724 파이썬 sys.setrecursionlimit() (1) | 2024.05.13 |