๐ป
[์๊ณ ๋ฆฌ์ฆ] [์ต๋จ๊ฑฐ๋ฆฌ ์์ ์ ๋ณต] ๋ค์ต์คํธ๋ผ - ์ต์๋น์ฉ๊ตฌํ๊ธฐ ๋ณธ๋ฌธ
์๊ณ ๋ฆฌ์ฆ/๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ
[์๊ณ ๋ฆฌ์ฆ] [์ต๋จ๊ฑฐ๋ฆฌ ์์ ์ ๋ณต] ๋ค์ต์คํธ๋ผ - ์ต์๋น์ฉ๊ตฌํ๊ธฐ
๋ํจ๋ 2020. 3. 4. 00:20๋ค์ต์คํธ๋ผ
if(dist[to] > dist[from] + cost){
dist[to] = dist[from] + cost;
}
- D[i] = ์์ -> i ๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ
- C[i] = i๊ฐ ์ฒดํฌ๋์ด ์์ผ๋ฉด true, ์๋๋ฉด false
1. ์ฒดํฌ๋์ด ์์ง ์๋ ์ ์ ์ค์์ D์ ๊ฐ์ด ๊ฐ์ฅ ์์ ์ ์ x๋ฅผ ์ ํํ๋ค.
2. x๋ฅผ ์ฒดํฌํ๋ค.
3. x์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ ์ ์ ๊ฒ์ฌํ๋ค.
- ๊ฐ์ ์ (x,y,z)๋ผ๊ณ ํ์ ๋
- d[y] > d[x] + z ์ด๋ฉด ๊ฐฑ์ ํด์ค๋ค.
1, 2, 3๋จ๊ณ๋ฅผ ๋ชจ๋ ์ ์ ์ ์ฒดํฌํ ๋๊น์ง ๊ณ์ํ๋ค.
- ๋ชจ๋ ์ ์ ์ ํํ๋ฏ๋ก(V-1) X ์ ํ์ ํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ O(V) = O(V^2)
์ธ์ ํ๋ ฌ์ ์ด์ฉํ ๊ตฌํ
for(int i=1; i<=n; i++){
dist[i] = inf;
}
dist[start] = 0;
for(int k=0; k<n-1; k++){
int m = inf+1;
int x = -1;
for(int i=1; i<=n; i++){ // ์ ํ์ ๋์ด์์ง ์์ผ๋ฉด์
if(check[i] == false && m > dist[i]){ // check๊ฐ false์ด๊ณ dist[i]๊ฐ ์ต์๊ฐ๋ณด๋ค ์์
m = dist[i];
x = i;
}
}
check[x] = true; // ํด๋น ์ ์ ์ ์ ํ
for(int i=1; i<=n; i++){
if(dist[i] > dist[x] + a[x][i]){
dist[i] = dist[x] + a[x][i];
}
}
}
์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ ๊ตฌํ
for(int i=1; i<=n; i++){
dist[i] = inf;
}
dist[start] = 0;
for(int k=0; k<n-1; k++){
int m = inf+1;
int x = -1;
for(int i=1; i<=n; i++){ // ์ ํ์ ๋์ด์์ง ์์ผ๋ฉด์
if(check[i] == false && m > dist[i]){ // check๊ฐ false์ด๊ณ dist[i]๊ฐ ์ต์๊ฐ๋ณด๋ค ์์
m = dist[i];
x = i;
}
}
check[x] = true; // ํด๋น ์ ์ ์ ์ ํ
for(int i=1; i<=a[x].size(); i++){
int y = a[x][u].to;
if(dist[y] > dist[x] + a[x][i].cost){
dist[y] = dist[x] + a[x][i].cost;
}
}
}
์ฐ์ต๋ฌธ์
https://www.acmicpc.net/problem/1916
๋ฐ์ํ
'์๊ณ ๋ฆฌ์ฆ > ๊ธฐ๋ณธ๊ธฐ ๋ค์ง๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ - Dynamic Programming (0) | 2020.03.16 |
---|---|
[์๊ณ ๋ฆฌ์ฆ][DFS์BFS ์์ ์ ๋ณต] ๊ทธ๋ํ์ ํ์ (0) | 2020.02.29 |
[์๊ณ ๋ฆฌ์ฆ][DFS์BFS ์์ ์ ๋ณต] ๊ทธ๋ํ์ ํํ (0) | 2020.02.29 |
[์๊ณ ๋ฆฌ์ฆ] ๋์ ํ๋ก๊ทธ๋๋ฐ - ์ดํญ๊ณ์ / ์ด์งํธ๋ฆฌ (0) | 2020.02.13 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ - Greedy Algorithm (0) | 2020.02.06 |
Comments