인접행렬 구현
// N크기의 그래프 생성 & 초기화
graphs = new int[N + 1][N + 1];
for (int[] graph : graphs) {
Arrays.fill(graph, Integer.MAX_VALUE);
}
// 거리 배열 생성 & 초기화
dis = new int[N + 1];
Arrays.fill(dis, Integer.MAX_VALUE);
// 방문 배열 생성
visit = new int[N + 1];
// 입력으로 그래프 초기값 대입(노드와 에지로 구성)
for (int i = 0; i < E; i++) {
int v1 = sc.nextInt();
int v2 = sc.nextInt();
int w = sc.nextInt();
graph[v1][v2] = w;
graph[v2][v1] = w;
}
void dijkstra2() {
// 시작 정점 초기화
dis[1] = 0;
visit[1] = 1;
// 다익스트라 시작
for (int i = 1; i <= N; i++) {
// 비용이 가장 작은 인접 노드를 찾기 위한 변수 초기화
int nextVertex = 1;
int min = Integer.MAX_VALUE;
// 시작 노드와 연결된 인접 노드 탐색(방문하지 않은 노드 중 최소 비용의 노드 탐색)
for (int j = 1; j <= N; j++) {
if (visit[nextVertex] == 0 && dis[nextVertex] < min) {
min = dis[j];
nextVertex = j;
}
}
for(int k = 1; k <= N; k++) {
if(visit[k] == 0 && (graph[nextVertex][k] != Integer.MAX_VALUE) ) { // 비용을 확인 가능하고 방문x 인접노드 중에서
if(dis[k] > dis[nextVertex] + graph[nextVertex][k]) { //해당 노드를 거쳐가는게 빠르면
dis[k] = dis[nextVertex] + graph[nextVertex][k]; // 그 노드까지의 비용을 갱신함
}
}
}
}
}Last updated