방향이 없는 그래프가 주어졌을 때, 특정한 두 점을 지나는 최단 경로를 찾는 문제입니다. 다익스트라를 사용하여 1번 점으로부터 v1번 점까지의 최단 거리(이하 [1,v1]), [1,v2], [v1,v2], [v1,n], [v2,n]을 구합니다. 어차피 두 점 v1와 v2을 지나는 [1,n]은 [1,v1][v1,v2][v2,n]와 [1,v2][v2,v1][v1,n]의 2가지 경우밖에 없기 때문입니다. 따라서 5개의 최단 거리를 모두 구한 후 경로가 존재한다면 둘 중 작은 값, 존재하지 않는다면 -1
을 출력하면 됩니다.
저는 일일이 최단거리 구하기 귀찮아서 플로이드-와셜 알고리즘을 사용했습니다. 모든 점 쌍에 대해 최단 거리를 구한 후, [1,v1][v1,v2][v2,n]와 [1,v2][v2,v1][v1,n] 중 짧은 것을 고릅니다. 출력하기 전에 [1,n]의 경로가 존재하는지부터 판별하여 존재하지 않는다면 -1
, 존재한다면 최단 거리를 출력하는 방식으로 풀었습니다.