티스토리 뷰

Algorithm

백준_플로이드_11404

Young_J 2020. 9. 18. 00:50

알고리즘

- 플로이드 워샬 기본문제.

- 플로이드 워샬과 다익스트라의 차이점을 알아야 함.

※ 다익스트라 시간복잡도 : V E logV

   플로이드 워샬 시간복잡도 : V^3

 

다익스트라 : 출발점에서 각 노드들간의 최소 거리.

플로이드 워샬 모든노드들의 최소 거리.

 

* 다익스트라를 노드수 만큼 구했더니 실패한 문제. 

-> 이유 : 노드가100개 간선이 100000개 라서 100 * 100 * 100000 * log 100 = 시간초과인듯..

* 플로이드 워샬로 풀 경우 100^3 = 1,000,000 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class 플로이드_11404 {
	static int N, M;
	static int inf = 10000001;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(br.readLine());
		M = Integer.parseInt(br.readLine());

		int dis[][] = new int[N + 1][N + 1];

		// dis배열 max값으로 초기화

		for (int i = 1; i < dis.length; i++) {
			for (int j = 1; j < dis.length; j++) {
				if (i == j)
					dis[i][j] = 0;
				else
					dis[i][j] = inf;
			}
		}

		// 간선 배열 만들기.
		for (int d = 0; d < M; d++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int to = Integer.parseInt(st.nextToken());
			int from = Integer.parseInt(st.nextToken());
			int cnt = Integer.parseInt(st.nextToken());

			if (dis[to][from] > cnt)
				dis[to][from] = cnt;
		}

		// 프로이드-와샬
		for (int k = 1; k < dis.length; k++) {// 거쳐가는 노드
			for (int i = 1; i < dis.length; i++) {// 출발 노드
				if(k==i) continue;
				for (int j = 1; j < dis.length; j++) {// 도착 노드
					if(i==j || k==j) continue;
					if (dis[i][k] + dis[k][j] < dis[i][j]) {
						dis[i][j] = dis[i][k] + dis[k][j];
					}
				}
			}
		}

		print(dis);

	}

	private static void print(int[][] dis) {

		for (int i = 1; i < dis.length; i++) {
			for (int j = 1; j < dis[i].length; j++) {
				if (dis[i][j] == inf) {
					dis[i][j] = 0;
				}
				System.out.print(dis[i][j] + " ");
			}
			System.out.println();
		}

	}

}

 

 

 

'Algorithm' 카테고리의 다른 글

SW Expert Academy_햄버거 다이어트  (0) 2020.09.21
SW Expert Academy_러시아 국기 같은 깃발  (0) 2020.09.20
백준_경쟁적 전염_18405  (0) 2020.09.17
백준_다리만들기_2146  (0) 2020.09.16
백준_미로탐색_2178  (0) 2020.09.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함