[์นด์นด์ค ๋ธ๋ผ์ธ๋ 2021] ํฉ์น ํ์ ์๊ธ :: c++ ์ฝ๋, ๋ฌธ์ ํด์, ํ๋ฃจ์ด๋ ์์ฌ
ํฉ์น ํ์ ์๊ธ
๋์ด๋ : โ โ โ โโ
๊ฑธ๋ฆฐ ์๊ฐ : ๋ชป ํ์์
๋ฌธ์
ํด์ค
๊ทธ๋ํ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ dijkstra๋ floyd-warshal ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ
-
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ชจ๋ ์ ์ => ๋ชจ๋ ์ ์ ์ต๋จ ๊ฒฝ๋ก ๊ตฌํ๊ธฐ
d[i][j] = i๋ถํฐ j๊น์ง์ ์ต์ ํ์ ์๊ธ
min(d[s][k]+d[k][a]+d[k][b])
๋ฅผ ๊ตฌํ๋ฉด ๋จ
-
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
- ํ ์ ์ => ๋ชจ๋ ์ ์ ์ต๋จ ๊ฒฝ๋ก ๊ตฌํ๊ธฐ
- ๋ฐฐ์ด(dist)๊ณผ ์ฐ์ ์์ ํ(qp)๋ฅผ ์ด์ฉํด์ ์ฒซ ์ ์ ๋ถํฐ ๊ฐ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฐฐ์ด์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์
- ์ฐ์ ์์ ํ์ ๋ค์ ๊ฐ ์ ์๋ ๋ ธ๋๋ค์ ๋ฃ์ผ๋ฉด์ ํด๋น ๊ฑฐ๋ฆฌ๋ฅผ dist ๋ฐฐ์ด์์ ๊ฐฑ์ ํ๋ ๋ฐฉ์
- a, b ๊ฐ๊ฐ์ ์ต๋จ ๊ฑฐ๋ฆฌ ๋น์ฉ๊ณผ ํน์ ์ง์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ ๋น์ฉ ์ค ๊ฐ์ฅ ์์ ๊ฒ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ถ์ถ
์ฝ๋
์ฝ๋๋ ๋ชจ๋ ์ด๊ณณ์ ์ฐธ์กฐํจ.
ํ๋ก์ด๋ ์์ฌ ์๊ณ ๋ฆฌ์ฆ ์ด์ฉ
#include <string>
#include <vector>
using namespace std;
int graphMap[201][201];
int solution(int n, int s, int a, int b, vector<vector<int>> fares) {
for(int i=0; i<201; i++){
for(int j=0; j<201; j++){
graphMap[i][j] = 1e8;
if(i==j)
graphMap[i][j] = 0;
}
}
for(int i=0; i<fares.size(); i++){
graphMap[fares[i][0]][fares[i][1]] = fares[i][2];
graphMap[fares[i][1]][fares[i][0]] = fares[i][2];
}
for(int i=0; i<=n; i++){
for(int j=0; j<=n; j++){
for(int k=0; k<=n; k++){
graphMap[j][k] = min(graphMap[j][k], graphMap[j][i]+graphMap[i][k]);
}
}
}
int answer = 1e9;
for(int i=0; i<=n; i++){
answer = min(answer, graphMap[s][i]+graphMap[i][a]+graphMap[i][b]);
}
return answer;
}
๋ฐ์ํ
Comment