[백준 1719번] 택배

2023. 10. 16. 17:19·알고리즘 문제풀이/백준
반응형

문제 링크: https://www.acmicpc.net/problem/1719

 

1719번: 택배

명우기업은 2008년부터 택배 사업을 새로이 시작하기로 하였다. 우선 택배 화물을 모아서 처리하는 집하장을 몇 개 마련했지만, 택배 화물이 각 집하장들 사이를 오갈 때 어떤 경로를 거쳐야 하

www.acmicpc.net

<문제 풀이> 플로이드-워셜 알고리즘

 

 

nxt[i][j] : i에서 j로의 최단 경로를 따라 i에서 가장 먼저 방문해야 하는 정점

 

이와 같은 2차원 배열 nxt를 추가로 정의하여 플로이드 알고리즘을 수행합니다.

 

i에서 j로 이동하는 경로에서 새로운 최단 거리를 갱신하는 장점 k를 찾게 되면, nxt[i][j] = nxt[i][k]로 nxt 배열을 갱신합니다.

 

이는 i에서 k로의 최단 경로를 따라 이동한 후, k에서 j로의 최단 경로를 이동하기 때문입니다. 따라서 i에서 j로 이동할 때 가장 먼저 방문해야 하는 정점은 i에서 k로 이동할 때 가장 먼저 방문해야 하는 정점인 nxt[i][k]와 같습니다.

 

 

<C++소스코드>

 
#include<iostream>
#include<cstring>
using namespace std;

const int MAX_N = 200;
int n, m;
int graph[MAX_N + 1][MAX_N + 1];
int nxt[MAX_N + 1][MAX_N + 1];

int main() {
	ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);

	cin >> n >> m;
	memset(graph, 0x3f, sizeof(graph));
	for (int i = 1; i <= n; i++) {
		graph[i][i] = 0;
	}
	for (int i = 0; i < m; i++) {
		int u, v, w; cin >> u >> v >> w;
		graph[u][v] = w;
		graph[v][u] = w;
		nxt[u][v] = v;
		nxt[v][u] = u;
	}
	for (int k = 1; k <= n; k++) {
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= n; j++) {
				if (graph[i][j] > graph[i][k] + graph[k][j]) {
					graph[i][j] = graph[i][k] + graph[k][j];
					nxt[i][j] = nxt[i][k];
				}
			}
		}
	}

	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (nxt[i][j] == 0) cout << "- ";
			else cout << nxt[i][j] << " ";
		}
		cout << '\n';
	}

	return 0;
}
반응형
저작자표시 (새창열림)

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 5052번] 전화번호 목록  (0) 2023.10.05
[백준 14426번] 접두사 찾기  (1) 2023.10.04
[백준 10217번] KCM Travel  (1) 2023.10.04
[백준 1948번] 임계경로  (1) 2023.10.04
[백준 24042번] 횡단보도  (1) 2023.10.04
'알고리즘 문제풀이/백준' 카테고리의 다른 글
  • [백준 5052번] 전화번호 목록
  • [백준 14426번] 접두사 찾기
  • [백준 10217번] KCM Travel
  • [백준 1948번] 임계경로
슥지니
슥지니
개발 블로그
  • 슥지니
    슥지니의 코딩노트
    슥지니
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • 알고리즘 문제풀이 (158)
        • 백준 (158)
      • 알고리즘 (6)
      • Node.js (2)
        • MongoDB (1)
        • 기타 (1)
      • spring (0)
      • 가상화폐 (1)
        • 바이낸스(Binance) (1)
      • C++ 테트리스 게임 (1)
      • C++ (10)
      • 안드로이드 프로그래밍 (21)
        • 코틀린 (21)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    코틀린을 활용한 안드로이드 프로그래밍
    코틀린
    백트랙킹
    콘솔 테트리스 게임
    구현
    C++
    dfs
    시뮬레이션
    백준
    콘솔
    C
    그래프
    Kotlin
    우선순위 큐
    BFS
    다이나믹 프로그래밍
    알고리즘
    그리디
    dp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
슥지니
[백준 1719번] 택배
상단으로

티스토리툴바