코드
#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로 풀면 간단하게 풀 수 있습니다
'하루하나코딩' 카테고리의 다른 글
백준 1874번 : 스택수열 c++ (0) | 2022.12.31 |
---|---|
백준 2667번 : 단지번호붙이기 c++ (0) | 2022.12.30 |
백준 2178번 : 미로 탐색 c++ (0) | 2022.12.28 |
백준 1260번 : DFS와 BFS c++ (0) | 2022.12.27 |
백준 1181번 : 단어정렬 c++ (0) | 2022.12.26 |