본문 바로가기

하루하나코딩

백준 2606번 : 바이러스 c++

코드

#include <iostream>
#include <vector>
#include <string.h>

using namespace std;

int N, M;
vector<pair<int, int> > v;
bool visited[102];	
int ans = 0;

void dfs(int t){
	visited[t] = true;

	for(int i = 0; i < M; i++){
		if(visited[v[i].second] == false && v[i].first == t){
			visited[v[i].second] = true;
			ans++;
			dfs(v[i].second);
		}
		else if(visited[v[i].first] == false && v[i].second == t){
			visited[v[i].first] = true;
			ans++;
			dfs(v[i].first);
		}
	}
}	

	
int main(){
	
	cin >> N >> M;
	
	int x, y;
	
	memset(visited, false, sizeof(visited));
	
	for(int i = 0; i < M; i++){
		cin >> x >> y;
		if(x > y) v.push_back(make_pair(y,x));
		else v.push_back(make_pair(x, y));
	}
	
	
	dfs(1);
	
	cout << ans;
	
	return 0;
}

알게된 점

저번 문제와 유사한 문제입니다. dfs로 풀면 간단하게 풀 수 있습니다