-
https://www.acmicpc.net/problem/1956
1956번: 운동
첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%201956
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 마을과 도로가 주어졌을 때 거리가 가장 짧은 사이클을 구하는 문제다.
해당 문제는 플로이드 와샬 알고리즘을 이용하였다.
먼저 마을 최대수가 400이고 최대 거리가 10000이라서 MAX값을 4000000으로 두었고,
이후 입력 처리를 하기 전에 플로이드 와샬 알고리즘을 위해 자기 자신으로 가능 경우를 제외하고는
map를 MAX값으로 초기화하고 이후 도로의 정보를 map에 추가한다 (양방향 아님)
이후 플로이드 와샬 알고리즘을 이용하여 최단거리로 갱신하고,
map를 탐색하는데 이때 i==j(자기 자신), i, j 혹은 j, i가 MAX값이면 사이클 생성에 실패하는 경우라 넘겨주고
이후 값들에 대해서는 플로이드로 갱신되어 있으니 map의 i, j와 j, i둘의 합을 구하면 사이클의 거리 값을 알 수 있고
이 값을 ans변수에 최솟값으로 갱신한다.
이후 ans값이 초기값과 동일하면 사이클이 없으므로 -1을 아닌 경우 원래의 값을 저장하고
최종적으로 출력해주어 문제를 해결했다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 5427 불 JAVA (0) 2022.01.06 Baekjoon 14940 쉬운 최단거리 JAVA (0) 2022.01.05 Baekjoon 15661 링크와 스타트 JAVA (0) 2022.01.03 Baekjoon 1535 안녕 JAVA (0) 2021.12.31 Baekjoon 1913 달팽이 JAVA (0) 2021.12.30 댓글