Study hard

(c++)백준 11725번: 트리의 부모 찾기 본문

백준/bfs, dfs

(c++)백준 11725번: 트리의 부모 찾기

Nimgnoej 2020. 6. 22. 19:17

https://www.acmicpc.net/problem/11725

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

[풀이]

dfs로 부모 노드를 찾는 문제였다.

입력에서 부모자식 관계를 알 수 없기 때문에 양방향으로 저장해주었다.

1부터 차례로 자식노드를 찾으면서 자식노드의 부모노드가 현재노드임을 저장해주었다.

 

#include <iostream>
#include <vector>
using namespace std;
#define Max 100001

int N;
int Parent[Max];
bool check[Max];
vector<int>Tree[Max];

void input() {
	cin >> N;
	for (int i = 1; i <= N; i++) {
		int a, b;
		cin >> a >> b;

		Tree[a].push_back(b);
		Tree[b].push_back(a);
	}
}

void dfs(int node) {
	//현재 노드 체크 표시
	check[node] = true;

	//연결된 노드 중 자식 노드 찾기
	for (int i = 0; i < Tree[node].size(); i++) {
		int child = Tree[node][i];
		if (check[child] == false) {
			Parent[child] = node;
			dfs(child);
		}
	}
}

void solution() {
	input();
	//root노드부터
	dfs(1);
	for (int i = 2; i <= N; i++) {
		cout << Parent[i] << '\n';
	}
}

int main() {
	solution();
	return 0;
}

'백준 > bfs, dfs' 카테고리의 다른 글

(c++)백준 16948번: 데스 나이트  (0) 2020.08.29
(c++)백준 1967번: 트리의 지름  (0) 2020.06.23
(c++)백준 1991번: 트리 순회  (0) 2020.06.22
(c++)백준 2178번: 미로 탐색  (0) 2020.06.20
(c++)백준 7576번: 토마토  (0) 2020.06.20