문제


입출력


문제 요약

정점이 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);
	}

양방향으로 값을 넣어주는게 중요하다.