문제
입출력
문제 요약
정점이 5개, 간선이 5개, 1번부터 출발한다.
정점과 연결된 관계는 (1,4), (1,2), (2,3), (2,4), (3,4)로 연결되어 있다.
이런 그림으로 양방향 연결되어 있다.
방문할 때는 인접 정점을 오름차순으로 정렬 후 방문한다고 했으니 정렬을 하자면
이런 식으로 정렬이 되어 있을 것이다.
1번부터 방문을 한다면
1번 -> 2번 -> 3번 -> 4번, 5번은 X 순으로 방문하게 될 것이다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> V[100001];
int visited[100001];
int ans[100001];
int depth = 1;
void dfs(int x) {
visited[x] = 1;
ans[x] = depth++;
for (int i = 0; i < V[x].size(); i++) {
int k = V[x][i];
if (!visited[k]) {
dfs(k);
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m, r;
cin >> n >> m >> r;
int u, v;
for (int i = 0; i < m; i++) {
cin >> u >> v;
V[u].push_back(v);
V[v].push_back(u);
}
for (int i = 1; i <= n; i++) {
sort(V[i].begin(), V[i].end());
}
dfs(r);
for (int i = 1; i <= n; i++) {
cout << ans[i] << '\n';
}
}
그래프 문제이기도 하기 때문에
for (int i = 0; i < m; i++) {
cin >> u >> v;
V[u].push_back(v);
V[v].push_back(u);
}
양방향으로 값을 넣어주는게 중요하다.
'📖Algorithm > DFS & BFS' 카테고리의 다른 글
JAVA [Algorithm] - 백준 2606 바이러스 (0) | 2024.12.13 |
---|---|
C++ [Algorithm] - 백준 11724 연결 요소의 개수 (0) | 2024.08.05 |
C++ [Algorithm] - 백준 10026 적록색약 (0) | 2024.08.02 |
C++ [Algorithm] - 백준 4963 섬의 개수 (0) | 2024.08.02 |
C++ [Algorithm] - 백준 2667 단지번호붙이기 (0) | 2024.08.02 |