728x90
반응형
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,
# 탐색을 시작할 번호 V
n, m, v = map(int, input().split())
# print(n, m, v)
#4 5 1
graph = [[] for _ in range(n+1)]
# graph = [ [], [], [], [], [] ]
# 1 2
# 1 3
# 1 4
# 2 4
# 3 4
for i in range(m):
a, b = map(int, input().split())
graph[a].append(b)
graph[b].append(a)
for i in range(1, n+1):
graph[i].sort()
print(graph)
visited = [False] * (n+1)
print(visited)
def dfs(v):
visited[v] = True
print(v, end=' ')
print(visited)
for i in graph[v]:
if not visited[i]:
dfs(i)
def bfs(v):
queue = deque([v])
visited[v] = True
while queue:
print(queue)
print(visited)
a = queue.popleft()
print(a, end=' ')
for i in graph[a]:
if not visited[i]:
queue.append(i)
visited[i] = True
dfs(v)
print("")
visited = [False] * (n+1)
bfs(v)
코드의 실행을 보기위해 print를 많이 사용하였고
마지막 출력시 visited를 초기화 해줘야 다시 사용이 가능한 것을 잊지 말자.
<입력>
5 5 3
5 4
5 2
1 2
3 4
3 1
<출력>
[[], [2, 3], [1, 5], [1, 4], [3, 5], [2, 4]]
[False, False, False, False, False, False]
3 [False, False, False, True, False, False]
1 [False, True, False, True, False, False]
2 [False, True, True, True, False, False]
5 [False, True, True, True, False, True]
4 [False, True, True, True, True, True]
deque([3])
[False, False, False, True, False, False]
3 deque([1, 4])
[False, True, False, True, True, False]
1 deque([4, 2])
[False, True, True, True, True, False]
4 deque([2, 5])
[False, True, True, True, True, True]
2 deque([5])
[False, True, True, True, True, True]
5
728x90
반응형
'개발공부 > 문제풀이' 카테고리의 다른 글
백준 2851 슈퍼마리오 파이썬(python) (0) | 2022.03.13 |
---|---|
백준(10825) : 국영수 파이썬(python) (0) | 2022.02.18 |
백준(9237번) : 이장님 초대 Python(파이썬) (0) | 2022.01.25 |
프로그래머스(LV2) - 소수찾기 파이썬(python) (0) | 2022.01.06 |
백준 14405 : 피카츄 파이썬(python) (0) | 2022.01.01 |