2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
[문제 풀이]
DFS를 이용하여 문제를 풀었습니다.
이 문제는 전형적이 DFS 문제로 1과 직/간접적으로 연결된 컴퓨터의 개수를 찾는 문제입니다. 1과 연결 된 i의 컴퓨터를 찾고 i와 연결 된 j의 컴퓨터를 찾는 식의 문제로 해결할 수 있습니다.
코드 설명
- 컴퓨터들의 연결을 2차원 배열에 나타냅니다.
- 1부터 n까지 반복하며 1과 연결 된 컴퓨터 i를 찾습니다.
- 1과 연결된 컴퓨터 i가 확인하지 않은 컴퓨터라면 i와 연결 된 컴퓨터들을 찾는 식으로 구현하였습니다.
[코드]
#include<iostream>
#include<vector>
using namespace std;
int n, m;
int map[101][101];
int visit[101];
vector<pair<int, int>> network;
void search(int idx) {
for (int i = 1; i <= n; i++) {
if (map[idx][i] == 1 && visit[i] == 0) {
visit[i] = 1;
search(i);
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int temp1, temp2;
cin >> temp1 >> temp2;
map[temp1][temp2] = 1;
map[temp2][temp1] = 1;
}
visit[1] = 1;
for (int i = 1; i <= n; i++) {
if (map[1][i] == 1 && visit[i] == 0) {
visit[i] = 1;
search(i);
}
}
int answer = 0;
for (int i = 1; i <= n; i++)
if (visit[i] == 1)
answer++;
cout << answer - 1<< endl;
return 0;
}
'algorithm > BOJ' 카테고리의 다른 글
백준 2644_촌수계산(C++) (0) | 2020.10.26 |
---|---|
백준 2667_단지번호붙이기(C++) (0) | 2020.10.26 |
백준 2178_미로 탐색(C++) (0) | 2020.10.25 |
백준 6603_로또(C++) (0) | 2020.10.23 |
백준 16395_파스칼의 삼각형(C++) (0) | 2020.10.23 |