개발/algorithm
[백준 11724번] 연결 요소의 개수 - python
zzi_on2
2022. 2. 15. 14:28
문제 링크
https://www.acmicpc.net/problem/11724
11724번: 연결 요소의 개수
첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주
www.acmicpc.net
풀이
- bfs 문제는 간선이 주어진 유형과 그래프가 주어진 유형으로 구분할 수 있는데
간선이 주어진 경우에는 본 문제처럼 0부터 n-1 까지 자기 자신과 연결된 노드를 찾는다.
from collections import deque
import sys
input = sys.stdin.readline
q = deque()
def bfs(i):
visited[i] = True
q.append(i)
while q:
x = q.popleft()
# 0부터 n까지의 정점 중 자신과 연결되어 있고 방문하지 않았으면 방문표시를 하고 큐에 추가
for k in range(n):
if graph[x][k] == 1 and not visited[k] :
visited[k] = True
q.append(k)
n, m = map(int,input().split())
graph = [ [0] * n for _ in range(n)]
# 연결 표시
for _ in range(m):
a, b = map(int,input().split())
graph[a-1][b-1] = 1
graph[b-1][a-1] = 1
# 방문 했는지 표시
visited = [False] * n
# 간선의 개수
cnt = 0
# 모든 정점에 대해
for i in range(n):
# 방문하지 않았으면 bfs 실행하여 연결된 노드를 찾아 방문 표시를 한다.
if not visited[i] :
bfs(i)
cnt += 1
print(cnt)
그래프가 주어진 경우에는 nx = [ 1, -1 , 0, 0 ] ny = [ 0, 0, 1, -1 ] 과 같이 이동할 수 있는 방향을 저장해주고 각 방향에 대해 이동해가면서 연결된 노드를 찾는다.
대표적인 문제를 아래와 같다.
https://zzion2.tistory.com/145
[백준 1012번] 유기농 배추 - python
문제 링크 https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부
zzion2.tistory.com