Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

작은 지식주머니

백준 파이썬 2606 바이러스 본문

백준 python 기록

백준 파이썬 2606 바이러스

작지 2021. 10. 24. 18:33

백준 링크:https://www.acmicpc.net/problem/2606

 

2606번: 바이러스

첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어

www.acmicpc.net

dfs로 풀어도 되고 bfs로 풀어도 되는 문제이다.

 

1로 시작하는 트리가 몇개인지 파악하는 문제

 

dfs의 경우

n=int(input())
nums=int(input())

matrix=[[0]*(n+1) for _ in range(n+1)]

for i in range(nums):
    a,b = map(int,input().split())
    matrix[a][b] = 1
    matrix[b][a] = 1

def dfs(start,visited):
    visited += [start]
    for i in range(n+1):
        if matrix[start][i] == 1 and i not in visited:
            dfs(i,visited)
    return visited

print(len(dfs(1,[]))-1)

 

bfs의 경우

from collections import deque

n=int(input())
nums=int(input())

matrix=[[0]*(n+1) for _ in range(n+1)]

for i in range(nums):
    a,b = map(int,input().split())
    matrix[a][b] = 1
    matrix[b][a] = 1

queue = deque([])
queue.append(1)

visited=[0]*(n+1)

while queue:
    x = queue.popleft()

    visited[x] = 1

    for i in range(1,n+1):
        if matrix[x][i] == 1 and visited[i] == 0:
            queue.append(i)

print(visited.count(1)-1)

 

Comments