반응형

 문제

 https://www.acmicpc.net/problem/2606




해당 노드에 연결된 모든 노드들을 찾는문제라고 볼수있다.

DFS를 통해 구현해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
N=int(sys.stdin.readline())#컴퓨터수
M=int(sys.stdin.readline())#연결수
matrix=[[0 for _ in range(N+1)] for _ in range(N+1)]
for i in range(M):
    x,y=map(int,sys.stdin.readline().split())
    matrix[x][y]=1
    matrix[y][x]=1
 
#current_node:시작 컴퓨터,matrix:인접행렬,virus_com:바이러스 걸린컴퓨터터
def dfs(current_com,matrix,virus_com):
    virus_com+=[current_com]#바이러스 걸린 컴퓨터 저장
    for search_node in range(len(matrix[current_com])):  # 연결된 컴퓨터 탐색
        if matrix[current_com][search_node] and search_node not in virus_com:  # 연결되어 있고 바이러스에 걸리지 않았다면
            virus_com = dfs(search_node, matrix, virus_com)  # 해당컴퓨터에서 다시 재귀로 실행
    return virus_com
 
 
print(len(dfs(1,matrix,[]))-1)#1번을 제외한 바이러스가 걸린 컴퓨터수

cs



반응형

'알고리즘(python) > 탐색' 카테고리의 다른 글

[Python]DFS와BFS 백준 1012  (0) 2020.02.13
[Python]DFS와BFS 백준 2667  (0) 2020.02.13
[Python]DFS와BFS 백준 1260  (0) 2020.02.13
[Python]이분탐색 백준 12015  (0) 2020.02.01
[Python]이분탐색 백준 1300  (2) 2020.02.01
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기