๐ฉ ์์ ์ ์ ์์ ์ ์ ์ ์ถ๊ฐํด๊ฐ๋ฉฐ ๋จ๊ณ์ ์ผ๋ก ํธ๋ฆฌ๋ฅผ ํ์ฅํ๋ ๊ธฐ๋ฒ
์ฆ, ํ์ ์ ์ ์ ๋ํด ์ฐ๊ฒฐ๋ ์ธ์ ์ ์ ๋ค ์ค ๋น์ฉ์ด ๊ฐ์ฅ ์ ์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ํ
๐ฉ ๋์
1. ์์ ๋จ๊ณ๋ ์์ ๋ ธ๋๋ง์ด ์ต์ ์ ์ฅ ํธ๋ฆฌ ์งํฉ์ ์ํ๋ค.
2. ํธ๋ฆฌ ์งํฉ์ ์ํ ์ ์ ๋ค๊ณผ ์ธ์ ํ ์ ์ ๋ค ์ค ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ค์น์ ๊ฐ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ์ ๋ํด ๊ฐ์ ๊ณผ ์ ์ ์ ์ต์ ์ ์ฅ ํธ๋ฆฌ ์งํฉ์ ๋ฃ๋๋ค (์ฌ์ดํด์ ๋ง๊ธฐ ์ํด ์ฐ๊ฒฐ๋ ์ ์ ์ด ์ด๋ฏธ ํธ๋ฆฌ์ ์ํ๋ค๋ฉด ๊ทธ ๋ค์ ์์๋ฅผ ๋ฃ๋๋ค)
3. 2๋ฒ ๊ณผ์ ์ MST ์งํฉ์ ์์ ๊ฐ์๊ฐ ๊ทธ๋ํ์ ์ ์ ์ ๊ฐ์๊ฐ ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์์ ์ ์ A
A์ ์ธ์ ํ ๋ ธ๋ B, C ์ค C๊ฐ ๊ฐ์ฅ ๊ฐ์ค์น๊ฐ ๋ฎ์ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋, C๋ฅผ ์งํฉ์ ๋ฃ๊ณ ๋น์ฉ์ AC ๊ฐ์ค์น๋ฅผ ๋ํ๋ค.
AC์ ์ธ์ ํ ๋ ธ๋๋ค ์ค ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ค์น๋ก ์ฐ๊ฒฐ๋ ์ ์ ์ B๋ค. ์งํฉ์ B๋ฅผ ๋ฃ๊ณ CB์ ๊ฐ์ค์น๋ฅผ ๋ํ๋ค.
๋ฐ๋ณตํ ์ต์ข ๊ฒฐ๊ณผ
A, B, C, D, E์ ์ธ์ ํ ๋ ธ๋๋ค ์ค ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ค์น๋ก ์ฐ๊ฒฐ๋ ์ ์ F๋ฅผ ์งํฉ์ ๋ฃ๊ณ DF ๊ฐ์ค์น๋ฅผ ๋ํ๋ค.
ํธ๋ฆฌ์ ์งํฉ์ ์ํ ์์์ ๊ฐ์๊ฐ N์ด ๋์์ผ๋ฏ๋ก, ํ์์ ์ค๋จํ๋ค. ํ์ ๊ฒฐ๊ณผ ์ต์ ์ ์ฅ ๋น์ฉ ํธ๋ฆฌ๋ 13
๐ฉ ์๋ฆฌ
์งํฉ ๋ด ์ ์ ๋ค์ ์ํํ๋ฉด์ ์ฐ์ ์์ ํ์ ์ฝ์ ํ ๋ค popํ์ฌ ๊ตฌํํ๋ฉด ๋๋ค.
๐ฉ ์๊ฐ๋ณต์ก๋
์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ ๐ O(V^2)
์ธ์ ๋ฆฌ์คํธ์ ํ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๐ O(E logV)
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
// ๊ทธ๋ํ์ ์ ์ ์
#define V 5
// ์ต์ ํค ๊ฐ ์ฐพ๊ธฐ
int minKey(int key[], bool mstSet[]) {
int min = INT_MAX, min_index;
for (int v = 0; v < V; v++)
if (mstSet[v] == false && key[v] < min)
min = key[v], min_index = v;
return min_index;
}
// ์ต์ ์ ์ฅ ํธ๋ฆฌ ๊ตฌ์ถ
void primMST(int graph[V][V]) {
int parent[V];
int key[V];
bool mstSet[V];
// ํค ๊ฐ๊ณผ mstSet ๋ฐฐ์ด ์ด๊ธฐํ
for (int i = 0; i < V; i++)
key[i] = INT_MAX, mstSet[i] = false;
key[0] = 0;
parent[0] = -1;
for (int count = 0; count < V - 1; count++) {
int u = minKey(key, mstSet);
mstSet[u] = true;
for (int v = 0; v < V; v++)
if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v])
parent[v] = u, key[v] = graph[u][v];
}
// ๊ฒฐ๊ณผ ์ถ๋ ฅ
cout << "Edge \tWeight\n";
for (int i = 1; i < V; i++)
cout << parent[i] << " - " << i << " \t" << graph[i][parent[i]] << " \n";
}
int main() {
/* ๊ทธ๋ํ ํํ (์ธ์ ํ๋ ฌ)
2 3
(0)--(1)--(2)
| / \ |
6| 8/ \5 |7
| / \ |
(3)-------(4)
9 */
int graph[V][V] = {
{0, 2, 0, 6, 0},
{2, 0, 3, 8, 5},
{0, 3, 0, 0, 7},
{6, 8, 0, 0, 9},
{0, 5, 7, 9, 0}
};
// ์ต์ ์ ์ฅ ํธ๋ฆฌ ๊ตฌํ๊ธฐ
primMST(graph);
return 0;
}
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > ๐ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฒจ๋ง-ํฌ๋ ์๊ณ ๋ฆฌ์ฆ(์ต๋จ ๊ฒฝ๋ก) (0) | 2024.04.19 |
---|---|
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ(์ต๋จ ๊ฒฝ๋ก) (1) | 2024.04.19 |
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ (์ต์ ์ ์ฅ ํธ๋ฆฌ) (1) | 2024.04.19 |
B-ํธ๋ฆฌ (0) | 2024.04.16 |
๋ ๋-๋ธ๋ ํธ๋ฆฌ(Red-Black Tree) (0) | 2024.04.15 |