11404๋ฒ: ํ๋ก์ด๋
์ฒซ์งธ ์ค์ ๋์์ ๊ฐ์ n์ด ์ฃผ์ด์ง๊ณ ๋์งธ ์ค์๋ ๋ฒ์ค์ ๊ฐ์ m์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์งธ ์ค๋ถํฐ m+2์ค๊น์ง ๋ค์๊ณผ ๊ฐ์ ๋ฒ์ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ๋จผ์ ์ฒ์์๋ ๊ทธ ๋ฒ์ค์ ์ถ๋ฐ ๋์์ ๋ฒํธ๊ฐ
www.acmicpc.net
โจ ๋ด ์์ค ์ฝ๋
#include<iostream>
#include<algorithm>
using namespace std;
int bus[101][101] = { 0, };
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m, a, b, c;
cin >> n >> m;
for (int i = 0; i < m; i++) {
cin >> a >> b >> c;
if (!bus[a][b]) {
bus[a][b] = c;
}
//์ด๋ฏธ ๋
ธ์ ์ด ์์ผ๋ฉด, ๋น์ฉ์ด ๋ ์์ ๊ฒ์ผ๋ก ๊ฐ์ ๋ฐ๊พธ์ด์ค๋ค
else {
bus[a][b] = min(bus[a][b], c);
}
}
//ํ๋ก์ด๋ - ์์ฌ
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
if (j == k) {
bus[j][k] = 0;
continue;
}
if (bus[j][i] && bus[i][k]){
if (bus[j][k] == 0 && bus[j][i] + bus[i][k] == 0) {
bus[j][k] = 0;
}
else if (bus[j][k] == 0) {
bus[j][k] = bus[j][i] + bus[i][k];
}
else if (bus[j][i] + bus[i][k] == 0) {
bus[j][k] = bus[j][k];
}
else {
bus[j][k] = min(bus[j][k], bus[j][i] + bus[i][k]);
}
}
}
}
}
for (int i = 1;i <= n; i++) {
for (int j = 1; j <= n;j++) {
cout << bus[i][j] << " ";
}
cout << "\n";
}
return 0;
}
๐ ๋ฌธ์ ํ์ด
๐ฑ ํ๋ก์ด๋ ์์ฌ
'ํ๋ก์ด๋-์์ฌ' ์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค
ํ๋ก์ด๋ ์์ฌ์ ๋ชจ๋ ์ ์ ์์ ๋ชจ๋ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋๋ฐ ์ข์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ๋ค
ํ ๋๋ ๊ธฐ๋ณธ์ ์ธ ํ๋ก์ด๋ ์์ฌ์ ๋ฐฉ์์ ์ฌ์ฉํ์๊ณ
'algorithm'๋ผ์ด๋ธ๋ฌ๋ฆฌ์ min ํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ๊ตฌํ๋ค๋ณด๋, 0์ ๊ฐ์ ๊ตฌํ์ง ๋ชปํ ๋์ ๊ฒฐ๊ณผ๋ก ๋์์ผ ๋๋ ๊ฒ์ธ๋ฐ ์ด๋ฅผ ์ต์์ธ ๊ฐ์ผ๋ก ํ๋ณํด๋ฒ๋ ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ช๊ฐ์ง ์์ธ ์ฝ๋๋ฅผ ๋ฃ์ด์ฃผ์๋ค
if (j == k) {
bus[j][k] = 0;
continue;
}
if (bus[j][i] && bus[i][k]){
if (bus[j][k] == 0 && bus[j][i] + bus[i][k] == 0) {
bus[j][k] = 0;
}
else if (bus[j][k] == 0) {
bus[j][k] = bus[j][i] + bus[i][k];
}
else if (bus[j][i] + bus[i][k] == 0) {
bus[j][k] = bus[j][k];
}
else {
bus[j][k] = min(bus[j][k], bus[j][i] + bus[i][k]);
}
}
ํ๋ก์ด๋ ์์ฌ ๋ฌธ์ ๋ ์์ง ๋ช๊ฐ์ง ํ์ด๋ณธ ๊ฒ์ด ์์ด์ ์๋ฒฝํ๊ฒ ์ดํด๋ฅผ ํ์ง ๋ชปํ ๊ฒ ๊ฐ๋ค
โ๊ณต๋ถ๊ฐ ๋ ํ์ํ ๋ฏโ
๐ฑ ๋ฌธ์ ํ์ด ๊ฒฐ๊ณผ
