-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path18_dijkstraAlgorithm.cpp
69 lines (63 loc) ยท 1.62 KB
/
18_dijkstraAlgorithm.cpp
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
// ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ์ ํ์ฉํ ๋ํ์ ์ธ ์ต๋จ ๊ฒฝ๋ก ํ์ ์๊ณ ๋ฆฌ์ฆ
// ์ธ๊ณต์์ฑ GPS ์ํํธ์จ์ด ๋ฑ์์ ๊ฐ์ฅ๋ง์ด์ฌ์ฉ
// ํน์ ํ ํ๋์ ์ ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก ๊ฐ๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์๋ ค์ค
// 1. ์ถ๋ฐ ๋
ธ๋๋ฅผ ์ค์ ํฉ๋๋ค.
// 2. ์ถ๋ฐ ๋
ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ ๋
ธ๋์ ์ต์ ๋น์ฉ์ ์ ์ฅํฉ๋๋ค.
// 3. ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋ ์ค์์ ๊ฐ์ฅ ๋น์ฉ์ด ์ ์ ๋
ธ๋๋ฅผ ์ ํํฉ๋๋ค.
// 4. ํด๋น ๋
ธ๋๋ฅผ ๊ฑฐ์ณ์ ํน์ ํ ๋
ธ๋๋ก ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ฌ ์ต์ ๋น์ฉ์ ๊ฐฑ์ ํฉ๋๋ค.
// 5. ์ ๊ณผ์ ์์ 3๋ฒ~4๋ฒ์ ๋ฐ๋ณตํฉ๋๋ค.
// 2์ฐจ์ ๋ฐฐ์ดํํ๋ก ์ฒ๋ฆฌ
// ํน์ ํ์์ ์ด๋ก ๊ฐ๋ ๋น์ฉ
#include <stdio.h>
int number = 6;
int INF = 1000000000;
// ์ ์ฒด ๊ทธ๋ํ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
int a[6][6] = {
{0,2,5,1,INF,INF},
{2,0,3,2,INF,INF},
{5,3,0,3,1,5},
{1,2,3,0,1,INF},
{INF,INF,1,1,0,2},
{INF,INF,5,INF,2,0}
};
bool v[6]; // ๋ฐฉ๋ฌธํ ๋
ธ๋
int d[6]; // ์ต๋จ๊ฑฐ๋ฆฌ
// ๊ฐ์ฅ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์ง๋ ์ ์ ์ ๋ฐํํฉ๋๋ค.
int getSmallIndex() {
int min = INF;
int index = 0;
for (int i = 0; i < number; i++) {
if (d[i] < min && !v[i]) { // ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ค ์ค์์ ๊ฑฐ๋ฆฌ๊ฐ์ด ์ต์๊ฐ๋ณด๋ค ์์ ๋
ธ๋๋ฅผ ์ฐพ์ผ๋ฉด
min = d[i];
index = i;
}
}
return index;
}
// ๋ค์ต์คํธ๋ผ๋ฅผ ์ํํ๋ ํจ์์
๋๋ค.
void dijkstra(int start) {
for (int i = 0; i < number; i++) {
d[i] = a[start][i];
}
v[start] = true;
for (int i = 0; i < number - 1; i++) {
int current = getSmallIndex();
v[current] = true;
for (int j = 0; j < 6; j++) {
if (!v[j]) {
if (d[current] + a[current][j] < d[j]) {
d[j] = d[current] + a[current][j];
}
}
}
}
}
int main(void) {
dijkstra(0);
for (int i = 0; i < number; i++) {
printf("%d ", d[i]);
}
}
// ํ์ ์ด์ฉํ dijkstra๊ตฌํ
//https://blog.naver.com/ndb796/221234424646