11404. 플로이드 (Java)

2023. 10. 12. 16:56·Algorithm & Data Structures/BOJ

이름에서 알수 있듯이 위 문제는 플로이드 워셜 의 알고리즘을 사용한다.

플로이드 워셜의 특징으로는

모든간선의 모든정점to 모든정점의 최소 거리를 체크한다.

음의 간선 사용 가능

3중 for문을 돈다

사용해본 결과 foreach 문 을 쓸게 아니라면 

아무래도 인접행렬 을 사용하는게 편해보임 but 시간이 좀 걸려보임

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

	static int N, M;
	static int[][] bus;
	static int[][] Graph;
	static int INF = Integer.MAX_VALUE;

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		N = Integer.parseInt(br.readLine());
		M = Integer.parseInt(br.readLine());
		Graph = new int[N+1][N+1];
		bus = new int[M][3];
		
		for(int i = 0 ; i <= N ; i++) {
			for(int j = 0 ; j <= N ; j++) {
				Graph[i][j] = INF;
				if(i == j)
					Graph[i][j] = 0;
			}
		}
		
		for(int i = 0 ; i < M ; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			bus[i][0] = Integer.parseInt(st.nextToken());
			bus[i][1] = Integer.parseInt(st.nextToken());
			bus[i][2] = Integer.parseInt(st.nextToken());
			if(Graph[bus[i][0]][bus[i][1]]>bus[i][2])
			Graph[bus[i][0]][bus[i][1]] =bus[i][2];
		}
		for(int k = 0 ; k < N + 1 ; k++) {	
			for(int i = 0 ; i < N + 1 ; i++) {		
				for(int j = 0 ; j < N + 1 ; j++) {	
					if(Graph[i][k] != INF && Graph[k][j] != INF)
						Graph[i][j] = Math.min(Graph[i][j],Graph[i][k]+Graph[k][j]);
				}
			}
		}
		for(int i = 1 ; i <= N ; i++) {
			for(int j = 1 ; j <= N ; j++) {
				if(Graph[i][j]==INF)
					System.out.print(0+" ");
				else	
					System.out.print(Graph[i][j]+" ");
			}
			System.out.println();
		}
	}
}

'Algorithm & Data Structures > BOJ' 카테고리의 다른 글

13549. 숨바꼭질3 (Java)  (0) 2023.10.17
2206. 벽부수고 이동하기 (Java)  (0) 2023.10.16
9465. 스티커 (Java)  (1) 2023.10.12
4485. 녹색 옷을 입은 애가 젤다지? (Java)  (1) 2023.10.11
17144. 미세먼지 안녕! (Java)  (2) 2023.10.11
'Algorithm & Data Structures/BOJ' 카테고리의 다른 글
  • 13549. 숨바꼭질3 (Java)
  • 2206. 벽부수고 이동하기 (Java)
  • 9465. 스티커 (Java)
  • 4485. 녹색 옷을 입은 애가 젤다지? (Java)
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (326)
      • Algorithm & Data Structures (246)
        • BOJ (104)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (27)
        • SQL (21)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백트래킹
    투포인터
    경로압축
    BFS
    후위순회
    백준
    PriorityQueue
    programmers
    dp
    전위순회
    구현
    DynamicProgramming
    유니온파인드
    프로그래머스
    Union-Find
    binarySearch
    이분탐색
    Stack
    dfs
    baekjoon
    Java
    골드
    algorithm
    다익스트라
    SQL
    동적계획법
    unionfind
    알고리즘
    스택
    Dijkstra
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
11404. 플로이드 (Java)
상단으로

티스토리툴바