Algorithm/📖Baekjoon
#2606 바이러스
yewoneeee
2022. 6. 3. 16:40
# 문제
# 입력 및 출력
# 풀이
BFS, DFS 둘 다 가능한 것 같아서 두가지 방법으로 풀어봄
1) BFS
// BFS
#include <iostream>
#include <queue>
using namespace std;
int connect[101][101];
int visit[101];
queue<int> q;
int main() {
int n, m, s, e, cnt = 0;
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> s >> e;
connect[s][e] = 1;
connect[e][s] = 1;
}
q.push(1);
visit[1] = 1;
while (!q.empty()) {
int t = q.front();
for (int i = 1; i <= n; i++) {
if (connect[t][i] && !visit[i]) {
cnt++;
q.push(i);
visit[i] = 1;
}
}
q.pop();
}
cout << cnt << "\n";
}
연결되어있는지 확인하는 배열인 connect를 단방향으로만 설정해줘서 한번 틀렸다
연결은 양방향이기 때문에 connect[s][e]와 connect[e][s] 둘 다 1로 설정해줘야 함
2) DFS
// DFS
#include <iostream>
using namespace std;
int n, m, s, e, cnt;
int connect[101][101];
int visit[101];
void dfs(int k) {
for (int i = 1; i <= n; i++) {
if (connect[k][i] && !visit[i]) {
visit[i] = 1;
cnt++;
dfs(i);
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> s >> e;
connect[s][e] = 1;
connect[e][s] = 1;
}
visit[1] = 1;
dfs(1);
cout << cnt << "\n";
}
DFS가 더 보기 편한듯ㅋㅋ
아직 bfs, dfs가 익숙하지가 않아서 기억 안날때마다 슈도코드 보고 구현하는데
많이 풀어봐야 익숙해져서 금방금방 쓸듯
그리디랑 dp문제만 풀지말고 그래프도 많이 풀기,,ㅋㅋ