#문제
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
#풀이 & 학습한 내용
DFS 또는 BFS로 그래프를 탐색해서 연결된 요소의 개수를 구해야 합니다. 이때, dfs를 쓰려면 재귀깊이를 꼭 늘려줘야 합니다. 유기농 배추(supremo7.tistory.com/179)와 매우 유사한 문제로 풀이가 비슷합니다.
#소스코드
from collections import deque #bfs에서 큐 쓰기위해
import sys
sys.setrecursionlimit(10**6) #dfs에서 재귀깊이 늘리기
input=sys.stdin.readline #시간초과 방지
def bfs(q):
while q: #경로있는 애들 다 살펴볼때까지 돈다
now_v=q.popleft() #큐에서 뽑은 거의 현재vertex
for new_v in maps[now_v]: #인접한 vertex들
if not visited[new_v]: #방문 안했으면
visited[new_v]=True #방문처리
q.append(new_v) #큐에 넣기
def dfs(now_v):
visited[now_v]=True
for new_v in maps[now_v]: #인접한 vertex들
if not visited[new_v]: #방문 안했으면
dfs(new_v)
vertex_num,edge_num=map(int,input().split())
maps=[[] for _ in range(vertex_num+1)] #adjacency list로 그래프 저장
visited=[False]*(vertex_num+1) #방문여부 저장
for _ in range(edge_num):
v1,v2=map(int,input().split())
maps[v1].append(v2)
maps[v2].append(v1) #인접 리스트로 그래프 저장
c_comp_num = 0 #연결 요소의 개수 저장할 변수
for now_v in range(1,vertex_num+1): #vertex 순서대로 보면서
if not visited[now_v]: #방문안한 vertex일때
c_comp_num+=1 #연결 요소의 개수 1증가
#visited[now_v]=True #방문처리
#q=deque([now_v])
#bfs(q) #★경로있는 vertex들 모두 방문처리
dfs(now_v)
print(c_comp_num)
github.com/HoYoungChun/Algorithm_PS/blob/master/DFS%26BFS/BOJ_11724.py
HoYoungChun/Algorithm_PS
Baekjoon Online Judge, Programmers problem solving by Python, C++ - HoYoungChun/Algorithm_PS
github.com
'Algorithm > DFS&BFS' 카테고리의 다른 글
[Python] 백준 4963번 : 섬의 개수 (S2) (0) | 2021.03.13 |
---|---|
[Python] 백준 14502번 : 연구소 (G5) (0) | 2021.03.13 |
[Python] 백준 2573번 : 빙산 (G4) - DFS&BFS 필수문제4 (0) | 2021.03.06 |
[Python] 백준 2468번 : 안전 영역 (S1) - DFS&BFS 필수문제3 (0) | 2021.03.06 |
[Python] 백준 5014번 : 스타트링크 (G5) - DFS&BFS 필수문제2 (0) | 2021.03.05 |