https://www.acmicpc.net/problem/1719
๋ฌธ์
๋ช ์ฐ๊ธฐ์ ์ 2008๋ ๋ถํฐ ํ๋ฐฐ ์ฌ์ ์ ์๋ก์ด ์์ํ๊ธฐ๋ก ํ์๋ค. ์ฐ์ ํ๋ฐฐ ํ๋ฌผ์ ๋ชจ์์ ์ฒ๋ฆฌํ๋ ์งํ์ฅ์ ๋ช ๊ฐ ๋ง๋ จํ์ง๋ง, ํ๋ฐฐ ํ๋ฌผ์ด ๊ฐ ์งํ์ฅ๋ค ์ฌ์ด๋ฅผ ์ค๊ฐ ๋ ์ด๋ค ๊ฒฝ๋ก๋ฅผ ๊ฑฐ์ณ์ผ ํ๋์ง ๊ฒฐ์ ํ์ง ๋ชปํ๋ค. ์ด๋ค ๊ฒฝ๋ก๋ฅผ ๊ฑฐ์น ์ง ์ ํด์, ์ด๋ฅผ ๊ฒฝ๋กํ๋ก ์ ๋ฆฌํ๋ ๊ฒ์ด ์ฌ๋ฌ๋ถ์ด ํ ์ผ์ด๋ค.
์์๋ ๊ทธ๋ํ์์ ๊ตต๊ฒ ํ์๋ 1, 2, 3, 4, 5, 6์ ์งํ์ฅ์ ๋ํ๋ธ๋ค. ์ ์ ๊ฐ์ ๊ฐ์ ์ ๋ ์งํ์ฅ๊ฐ์ ํ๋ฌผ ์ด๋์ด ๊ฐ๋ฅํจ์ ๋ํ๋ด๋ฉฐ, ๊ฐ์ค์น๋ ์ด๋์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด๋ค. ์ด๋ก๋ถํฐ ์ป์ด๋ด์ผ ํ๋ ๊ฒฝ๋กํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๊ฒฝ๋กํ๋ ํ ์งํ์ฅ์์ ๋ค๋ฅธ ์งํ์ฅ์ผ๋ก ์ต๋จ๊ฒฝ๋ก๋ก ํ๋ฌผ์ ์ด๋์ํค๊ธฐ ์ํด ๊ฐ์ฅ ๋จผ์ ๊ฑฐ์ณ์ผ ํ๋ ์งํ์ฅ์ ๋ํ๋ธ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด 4ํ 5์ด์ 6์ 4๋ฒ ์งํ์ฅ์์ 5๋ฒ ์งํ์ฅ์ผ๋ก ์ต๋จ ๊ฒฝ๋ก๋ฅผ ํตํด ๊ฐ๊ธฐ ์ํด์๋ ์ ์ผ ๋จผ์ 6๋ฒ ์งํ์ฅ์ผ๋ก ์ด๋ํด์ผ ํ๋ค๋ ์๋ฏธ์ด๋ค.
์ด์ ๊ฐ์ ๊ฒฝ๋กํ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ n๊ณผ m์ด ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์์๋๋ก ์ฃผ์ด์ง๋ค. n์ ์งํ์ฅ์ ๊ฐ์๋ก 200์ดํ์ ์์ฐ์, m์ ์งํ์ฅ๊ฐ ๊ฒฝ๋ก์ ๊ฐ์๋ก 10000์ดํ์ ์์ฐ์์ด๋ค. ์ด์ด์ ํ ์ค์ ํ๋์ฉ ์งํ์ฅ๊ฐ ๊ฒฝ๋ก๊ฐ ์ฃผ์ด์ง๋๋ฐ, ๋ ์งํ์ฅ์ ๋ฒํธ์ ๊ทธ ์ฌ์ด๋ฅผ ์ค๊ฐ๋๋ฐ ํ์ํ ์๊ฐ์ด ์์๋๋ก ์ฃผ์ด์ง๋ค. ์งํ์ฅ์ ๋ฒํธ๋ค๊ณผ ๊ฒฝ๋ก์ ์์์๊ฐ์ ๋ชจ๋ 1000์ดํ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
์์๋ ๊ฒ๊ณผ ๊ฐ์ ํ์์ ๊ฒฝ๋กํ๋ฅผ ์ถ๋ ฅํ๋ค.
ํ์ด
๊ฐ๋ฅํ ๋ชจ๋ ์ ์ 2๊ฐ์ ์กฐํฉ์ ๋ํ ์ต๋จ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ธฐ ์ํด ํ๋ก์ด๋-์์
์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ๋ค.
(ํ๋ก์ด๋-์์
์ DP ์ ๊ทผ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ASP ์๊ณ ๋ฆฌ์ฆ์ด๋ค.)
์ด๋ ๊ทธ๋ํ์ ๊ฐ์ค์น (๋ณธ ๋ฌธ์ ์์๋ ๊ฑธ๋ฆฌ๋์๊ฐ) ๋ฟ๋ง ์๋๋ผ ์ง๋๊ฐ๋ ๋
ธ๋(์งํ์ฅ) ์ ๋ํ ์ ๋ณด๋ ๋ด์ ์ ์๋๋ก
pair ํํ๋ก {๊ฐ์ค์น, ์ง๋๋ ๋
ธ๋} ๋ฅผ ๋ด์์ฃผ์๋ค.
// Authored by : seondal
// Co-authored by : -
// #include <bits/stdc++.h>
#include <iostream>
#include <vector>
using namespace std;
typedef pair<int,int> ci;
const int INF = 1e7;
void floydWarshall(int n, vector<vector<ci>>&graph) {
for(int k=1; k<=n; k++) {
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
int passK = graph[i][k].first + graph[k][j].first;
if(passK < graph[i][j].first) {
// k ์งํ์ฅ์ ์ง๋๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋น ๋ฅธ๊ฒฝ์ฐ
graph[i][j].first = passK;
graph[i][j].second = graph[i][k].second;
}
}
}
}
return;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n,m, a,b,t;
cin >> n >> m;
// ์ด๊ธฐํ
vector<vector<ci>> graph(n+1, vector<ci>(n+1, {INF,0})); // graph[i][j] = {๊ฒฝ๋กํฌ๊ธฐ, ์ง๋๋ ์งํ์ฅ}
for(int i=1; i<=n; i++)
graph[i][i] = {0, 0}; // i์์ i๋ก ๊ฐ๋๋ 0์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ์งํ์ฅ์ ์ง๋์ง ์์(0)
// ์
๋ ฅ
while(m--) {
cin >> a >> b >> t;
// a์์ b๋ก ๊ฐ๋ t์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ ์งํ์ฅ b๋ฅผ ์ง๋จ
graph[a][b] = {t, b};
graph[b][a] = {t, a};
}
// ์ฐ์ฐ
floydWarshall(n, graph);
// ์ถ๋ ฅ
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++){
if(graph[i][j].second == 0)
cout << "- ";
else
cout << graph[i][j].second << " ";
}
cout << "\n";
}
return 0;
}
/*
*/
'๐๏ธ ICPC Sinchon > Shortest Path' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ G3][C++] ๋ฐฑ์ค 1865๋ฒ: ์ํ (0) | 2022.11.03 |
---|---|
๋ฐฑ์ค 11657๋ฒ: ํ์๋จธ์ (0) | 2022.11.03 |
๋ฐฑ์ค 11404๋ฒ: ํ๋ก์ด๋ (0) | 2022.11.03 |
[BOJ G4][C++] ๋ฐฑ์ค 10282๋ฒ: ํดํน (0) | 2022.11.01 |
๋ฐฑ์ค 1753๋ฒ: ์ต๋จ๊ฒฝ๋ก (0) | 2022.11.01 |