IT
파이썬 1260번
프로개발러
2023. 8. 1. 10:53
반응형
from collections import deque
N, M, V = map(int, input().split())
graph = [[False] * (N + 1) for _ in range(N + 1)] # 2차원 배열 선언 / [N+1][N+1] 선언
#graph = [[False]*(N+1)] * (N+1)
# +1을 해주는 이유는 0번 일 때 1번을 바라보도록
for _ in range(M):
a, b = map(int, input().split()) # 입력
graph[a][b] = True
graph[b][a] = True
# 2차원 배열 [3][3]일 경우
# 입력값 2 2 1
# 1 2
# 2 1
# [[False, False, False], [False, False, True], [False, True, False]]
# 1번 정점이 2번 정점과 연결 ->
# 1번 정점에서 2번과 연결 했기 때문에 True 표시 [1][2]에서 True표시
# [[False, False, False], [False, False, True], [False, True, False]]
# 2번 정점이 1번 정점과 연결 ->
# 2번 정점에서 1번과 연결 했기 때문에 True 표시 [2][1]
# [[False, False, False], [False, False, True], [False, True, False]]
visited1 = [False] * (N + 1) # dfs의 방문기록
visited2 = [False] * (N + 1) # bfs의 방문기록
# 깊이우선탐색
# 1
# 2 3
# 4 5 6 7
# 1 - 2 -4 - 5 - 3 -6 -7
# 7 ? 1
def dfs(V):
visited1[V] = True # 처음방문하면 True표시
print(V, end=" ")
for i in range(1, N + 1):
if not visited1[i] and graph[V][i]: # 만약 i값을 방문하지 않았고 V와 연결이 되어 있다면
dfs(i) # 탐색
# 너비우선탐색
def bfs(V):
q = deque([V])
visited2[V] = True # 처음방문하면 True표시
while q:
V = q.popleft()
print(V,end=" ")
for i in range(1,N+1):
if not visited2[i] and graph[V][i]: # 만약 i값을 방문하지 않았고 V와 연결이 되어 있다면
q.append(i)
visited2[i]=True
dfs(V)
print()
bfs(V)
참고소스 https://ji-gwang.tistory.com/291
백준 1260번 파이썬 문제풀이(큐와 그래프 - DFS와 BFS)
해당 문제는 DFS와 BFS의 기본개념을 이해하기 좋은문제이다. DFS는 재귀로 구현하는게 보통이고 BFS는 queue로 구현하는게 보통이다. 또한 입력받은 노드의 개수만큼 이차원 리스트로(이차원 리스
ji-gwang.tistory.com
반응형