[그래프] 가장 먼 노드
|| 문제설명 ||
- n개의 노드가 있는 그래프가 있다.
- 각 노드는 1부터 n까지 번호가 적혀있고, 1번 노드에서 가장 멀리 떨어진 노드의 갯수를 구하려고 한다. (가장 멀리 떨어진 노드란 최단경로로 이동했을 때 간선의 개수가 가장 많은 노드들을 의미)
- 1번 노드로부터 가장 멀리 떨어진 노드가 몇 개인지를 return 하도록 solution 함수를 작성하라.
- n : 노드의 개수
- edge : 간선에 대한 정보가 담긴 2차원 배열
_ 노드의 개수 (n) : 2 이상 20,000 이하
_ 간선 : 양방향, 총 1개 이상 50,000개 이하의 간선
_ edge 배열 각 행 [a, b] : a번 노드와 b번 노드 사이의 간선
|| 문제해결방법 ||
- 양방향 : [a, b], [b, a] 모두 그래프에 포함
|| 코드 ||
[2020.09.19] 성공
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(int n, vector<vector<int>> edge) {
vector<vector<bool>> g(n+1, vector<bool>(n+1, false));
vector<bool> chk(n+1,true);
vector<int> cnt(n+1, 0);
queue<int> q;
int max = 0, answer = 0;
for(int i = 0; i < edge.size(); i++) {
g[edge[i][0]][edge[i][1]] = g[edge[i][1]][edge[i][0]] = true;
}
q.push(1); chk[1] = false; chk[1]=1;
while(!q.empty()) {
for(int i = 1; i <= n; i++) {
if(chk[i] && g[q.front()][i]) {
g[q.front()][i] = g[i][q.front()] = chk[i]= false;
q.push(i);
max = cnt[i] = cnt[q.front()] + 1;
}
}
q.pop();
}
for(int i=1; i<=n; i++)
if(max == cnt[i]) answer++;
return answer;
}
Author And Source
이 문제에 관하여([그래프] 가장 먼 노드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yerin6860/그래프-가장-먼-노드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)