https://www.acmicpc.net/problem/2606
#Solution
문제의 카테고리가 플로이드 와샬 알고리즘으로 되어있어, 이 방법으로 계속 풀다가 시간 복잡도, 구현 방법 등등에 있어서 BFS(너비 우선 탐색) 알고리즘이 훨씬 더 효율적이므로 이를 통해 해결하였다. 결국 1과 연결된 것만 구하면 되니까. + 양방향 그래프라서 네트워크 정보를 한 번 뒤집어서 2차원 배열에 넣어줬다.
computer = int(input())
network = int(input())
virus_map = [[0 for _ in range(computer + 1)] for _ in range(computer + 1)]
#2차원 배열 안에 넣어주기
for _ in range(network):
x, y = map(int, input().split())
virus_map[x][y] = 1
virus_map[y][x] = 1
#1과 연결된 모든 노드 뽑기
def bfs(virus_map, start):
queue = [start]
visited = []
while queue:
temp = queue.pop(0)
visited.append(temp)
for i in range(len(virus_map)):
if virus_map[temp][i] and i not in visited and i not in queue:
queue.append(i)
return len(visited) - 1
#1을 제외한 감염된 노드 수 출력
print(bfs(virus_map, 1))
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#148 백준 파이썬 [11866] 조세퍼스 문제 0 (0) | 2019.10.24 |
---|---|
#147 백준 파이썬 [1932] 정수 삼각형 (0) | 2019.10.24 |
#145 백준 파이썬 [1967] 트리의 지름 - BFS (0) | 2019.10.23 |
#144 백준 파이썬 [1991] 트리 순회 (0) | 2019.10.22 |
#143 백준 파이썬 [11725] 트리의 부모 찾기 (0) | 2019.10.22 |