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
  • 전체
    오늘
    어제
    • 분류 전체보기 (316)
      • Algorithm & Data Structures (238)
        • BOJ (96)
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (25)
        • SQL (19)
        • 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.