Computer Science/C++

백준 C++ | #29 BOJ2606 바이러스 C++ 문제 풀이

토마토. 2022. 9. 5. 14:30

2606번: 바이러스 (acmicpc.net)

 

2606번: 바이러스

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

www.acmicpc.net

첫 DFS 문제! 

일단 이차원 배열에 그래프를 정의해주고, 

그 다음에 dfs 함수를 구현하고, 시작 노드를 dfs에 넣어 완전탐색을 시킨다. 

#include <iostream>
#include <vector>

int answer = 0;

void dfs(int x, int vertex, int edge, int** graph, int* visited) {
	visited[x] = 1;
	for (int i = 1; i <= vertex; i++) {
		if (graph[x][i] == 1 && !visited[i]) {
			answer++;
			dfs(i, vertex, edge, graph, visited);
		}
	}
}

int main() {
	int vertex, edge;

	std::cin >> vertex;
	std::cin >> edge;

	int** graph = new int*[vertex+1];
	int* visited = new int[vertex+1];

	for (int i = 0; i < vertex+1; i++) {
		graph[i] = new int[vertex+1];
		visited[i] = 0;
	}

	for (int i = 0; i < vertex + 1; i++) {
		for (int j = 0; j < vertex + 1; j++) {
			graph[i][j] = -1;
		}
	}

	for (int i = 0; i < edge; i++) {
		int x, y;
		std::cin >> x >> y;
		graph[x-1][y-1] = graph[y-1][x-1] = 1;
	}
	
	dfs(0, vertex, edge, graph, visited);
	
	std::cout << answer << std::endl;

	return 0;
}