Make Unreal REAL.
article thumbnail
Level 3. 부대복귀

 

 

전형적인 다익스트라 문제이다.

  • 특정 지점에서 다른 지점까지의 최단 거리를 구할 때, 다익스트라를 사용한다.
  • 이때 음수 가중치가 존재한다면, 벨만-포드를 사용한다.
    벨만-포드는 음수 사이클을 확인할 때도 사용한다.
  • 모든 지점 간의 최단 거리를 구할 때는 플로이드-워셜을 사용한다.
  • 그 외에, 최소 신장 트리(MST)를 구할 때는 크루스칼을 사용한다.

 

#include <iostream>
#include <vector>
#include <queue>

#define UNREACHABLE 200000

using namespace std;

vector<int> solution(int n, vector<vector<int>> roads, vector<int> sources, int destination)
{
    vector<int> answer;
    queue<int> que;
    vector<vector<int>> adj(n + 1);
    vector<int> distance(n + 1, UNREACHABLE);

    for (vector<int>& road : roads)
    {
        adj[road[0]].emplace_back(road[1]);
        adj[road[1]].emplace_back(road[0]);
    }

    distance[destination] = 0;
    que.emplace(destination);

    while (!que.empty())
    {
        int v = que.front(); que.pop();

        for (int vadj : adj[v])
        {
            int dist = distance[v] + 1;

            if (dist < distance[vadj])
            {
                distance[vadj] = dist;
                que.emplace(vadj);
            }
        }
    }

    for (int src : sources)
        if (distance[src] == UNREACHABLE)
            answer.emplace_back(-1);
        else
            answer.emplace_back(distance[src]);

    return answer;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 2. 이모티콘 할인행사  (0) 2023.09.07
Level 2. N-Queen  (0) 2023.09.06
Level 3. 스티커 모으기(2)  (0) 2023.09.05
Level 3. 경주로 건설  (0) 2023.09.04
Level 3. 보석 쇼핑  (0) 2023.09.03
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그