728x90
반응형
https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
풀이
이 문제는 최단거리나 방향성이 있는 문제가 아니기 때문에 bfs와 dfs를 모두 사용할 수 있다.
아래의 코드는 bfs를 이용하여 작성한 코드이다.
graph배열을 생성 후, 각 정점에서 연결된 정점들을 저장한다.
그리고 vis배열을 이용하여 각 정점에 방문했는지의 여부를 체크한다.
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
|
from collections import deque
n=int(input())
m=int(input())
graph=[[]*n for _ in range(n+1)]
vis=[-1]*(n+1)
def bfs(i):
deq=deque()
deq.append(i)
vis[i]=0
cnt=0
while deq:
v=deq.popleft()
cnt += 1
for i in graph[v]:
if vis[i]==-1:
deq.append(i)
vis[i]=0
return cnt-1
for _ in range(m):
a,b=map(int, input().split())
graph[a].append(b)
graph[b].append(a)
print(bfs(1))
|
cs |
아래의 코드는 dfs로 작성한 코드이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from collections import deque
n=int(input())
m=int(input())
graph=[[]*n for _ in range(n+1)]
vis=[-1]*(n+1)
cnt=0
def dfs(i):
vis[i]=0
global cnt
cnt+=1
for a in graph[i]:
if vis[a]==-1:
dfs(a)
for _ in range(m):
a,b=map(int, input().split())
graph[a].append(b)
graph[b].append(a)
dfs(1)
print(cnt-1)
|
cs |
728x90
반응형
'Python3 > 백준 알고리즘' 카테고리의 다른 글
2022.02.14 [백준] (python 파이썬) DNA (0) | 2022.02.14 |
---|---|
2022.02.14 [백준] (python 파이썬) DFS와 BFS (0) | 2022.02.14 |
2022.02.14 [백준] (python 파이썬) 미로 탐색 (0) | 2022.02.14 |
2022.02.13 [백준] (python 파이썬) 숨바꼭질3 (0) | 2022.02.13 |
2022.02.13 [백준] (python 파이썬) 숨바꼭질2 (0) | 2022.02.13 |
댓글