모든 정점 간의 최소 비용 한꺼번에 계산.
- 모든 정점에 대해서 2차원 배열로 비용 테이블 제작.
- 서로 비 연결 비용은 INF로 설정.
- 출발지 a, 도착지 b 가 있을 때, 비용이 k를 경유해서 가는 비용보다 비싸면 경유했을 때 비용으로 갱신.
- 순환 순서는. 먼저 경유 노드를 고르고, 나머지 모든 경로에 대해 경유 노드를 거칠 때 비용을 비교하여 갱신
int a[4][4] = {
{ 0, 5, INF, 8 },
{ 7, 0, 9, INF },
{ 2, INF, 0, 4 },
{ INF, INF, 3, 0 }
};
//k=거쳐가는 노드
for (int k = 0; k < 4; ++k)
{
//i = 출발 노드
for (int i = 0; i < 4; ++i)
{
if (k == i)
continue;
//j = 도착 노드
for (int j = 0; j < 4; ++j)
{
if (k == j)
continue;
if (a[i][j] > a[i][k] + a[k][j])
a[i][j] = a[i][k] + a[k][j];
}
}
}
//결과 출력
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
printf("%3d ", a[i][j]);
}
printf("\n");
}
'c++ 자료구조, 알고리즘' 카테고리의 다른 글
임의 연속 부분 수열의 합 중, 최댓값 ( dp, 분할 정복) (0) | 2024.03.28 |
---|---|
투 포인터 (1) | 2024.03.28 |
c++ 펜윅 트리 (0) | 2023.09.25 |
c++ LIS (최장 증가 부분 수열 찾기) (0) | 2023.09.24 |
c++ 세그먼트 트리 (0) | 2023.09.23 |