본문 바로가기

최단경로3

[Java] 알고리즘 최단경로 (플로이드-워셜) [Java] 알고리즘 최단경로 (플로이드-워셜) 플로이드-워셜 다익스트라와 벨만 포드는 하나의 시작점에서 모든 노드들 사이의 거리를 알아냈다면, 플로이드-워셜은 모든 노드들 사이의 최소 거리를 알아낼 수 있다 음수가 있어도 가능하고, 자기 자신에게 가는 것이 만약 0 아래로 떨어지면 음수 사이클이라는 것을 확인할 수 있다 단 3중 for문을 사용하기 때문에 다른 최단 경로 알고리즘에 비해 시간 복잡도가 높다 이 다음에는 갱신할 데이터가 없다 import java.util.*; public class Main3 { static int[][] dist; static int INF = 1000000000; public static void floydWarshall(int nodes, int edge, int[.. 2023. 7. 11.
[Java] 알고리즘 최단경로 (벨만-포드) [Java] 알고리즘 최단경로 (벨만-포드) 벨만-포드 음수 가중치를 포함해서, 시작 정점에서 다른 정점까지 최단 거리를 구할 수 있다 추가로 벨만-포드 알고리즘을 통해서 음수 사이클 존재의 여부를 알 수 있다 음수 사이클이란, 한 노드에서 다른 노드 사이의 간선이 2개가 존재하고, 왔다 갔는데, 가중치가 오히려 내려가는 것 A, B가 있는데 A -> B 는 8 이고 B -> A 는 -9 라고 하면, A와 B를 오고 가면 -1이 된다 모든 간선을 순회한다!!! import java.util.*; public class Main2 { static class Edge { int from; int to; int distance; Edge(int from, int to, int distance) { this.f.. 2023. 7. 10.
[Java] 알고리즘 최단경로 (다익스트라) [Java] 알고리즘 최단경로 (다익스트라) 최단 경로 알고리즘 두 노드를 연결하는 가장 짧은 경로를 찾는다 (노드 사이의 간선 마다, 특정 값이 있다) 지도 탐색, 네트워크 다익스트라 출발 노드 기준에서, 다른 모든 노드의 최단 경로를 구할 수 있다 (하지만 가중치 음수 값이 없어야 한다) 다익스트라 알고리즘은, 우선순위 큐를 사용한다 그림으로 대략적인 설명 import java.util.*; public class Dijkstra { static class Node { int to; int distance; Node(int to, int distance) { this.to = to; this.distance = distance; } } public static void dijkstra(int node.. 2023. 7. 10.