ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Prim's MST algorithm
    Algorithm/그래프 2020. 1. 31. 13:23
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    //프림 알고리즘의 구현
     
    const int MAX_V = 100;
    const int INF = 987654321;
    //정점의 개수
    int V;
    //그래프의 인접 리스트, (연결된 정점 번호, 간선 가중치) 쌍을 담는다
    vector<pair<intint>> adj[MAX_V];
    //주어진 그래프에 대해 최소 스패닝 트리에 포함된 간선의 목록을 selected에
    //저장하고, 가중치의 합을 반환한다.
    int prim(vector<pair<intint>>& selected)
    {
        selected.clear();
        //해당 점정이 트리에 포함되어 있나?
        vector<bool> added(V, false);
        //트리에 인접한 간선 중 해당 정점에 닿는 최소 간선의 정보를 저장한다.
        vector<int> minWeight(V, INF), parent(V, -1);
        //가중치의 합을 저장할 변수
        int ret = 0;
        //0번 정점을 시작점으로 : 항상 트리에 가장 먼저 추가됨
        minWeight[0= parent[0= 0;
        for(int iter = 0; iter < V; ++iter)
        {
            //다음 트리에 추가할 정점 u를 찾는다
            int u = -1;
            for(int v = 0; v < V; ++v)
                if(!added[v] && (u == -1 || minWeight[u] > minWeight[v]))
                    u = v;
            //(parent[u], u)를 트리에 추가한다
            if(parent[u] != u)
                selected.push_back(make_pair(parent[u], u));
            ret += minWeight[u];
            added[u] = true;
            //u에 인접한 간선 (u, v)들을 검사한다
            for(int i = 0; i<adj[u].size(); ++i)
            {
                int v = adj[u][i].first, cost = adj[u][i].second;
                if(minWeight[v] > cost)
                {
                    minWeight[v] = cost;
                    parent[v] = u;
                }
            }
        }
        return ret;
    }
    cs

     

     

     

     

     

    Prim's MST

    하나의 시작점으로 구성된 트리에 간선을 하나씩 추가하며 스패닝 트리가 될 때까지 키워 냅니다.

     

     

     

     

    시간복잡도

    O(|V|^2 + |E|)

     

     

     

     

    프로그래밍 대회에서 배우는 알고리즘 문제해결전략2

    'Algorithm > 그래프' 카테고리의 다른 글

    이분 매칭 문제를 해결하는 증가 경로 알고리즘  (0) 2020.02.23
    Ford-Fulkerson algorithm  (0) 2020.02.10
    Kruskal's MST algorithm  (0) 2020.01.30
    Floyd-Warshall algorithm  (0) 2020.01.23
    Bellman-Ford algorithm  (0) 2020.01.20

    댓글

Designed by Tistory.