본문 바로가기
알고리즘/그래프

[java 백준] 골드 4/ 11404번 플로이드

by Meaning_ 2022. 7. 6.
728x90
반응형
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
 
class Main{
 
    public static int n;
    public static int m;
    public static int arr[][];
 
    public static int INF=1000000000;
 
 
    public static void main(String[]args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        n=Integer.parseInt(br.readLine());
        m=Integer.parseInt(br.readLine());
 
        arr=new int[n+1][n+1];
 
 
 
        //무한으로 초기화
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                arr[i][j]=INF;
            }
        }
        //자기자신으로 가면 0
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(i==j){
                    arr[i][j]=0;
                }
            }
        }
        
        //입력받기
 
        for(int i=0;i<m;i++){
            st=new StringTokenizer(br.readLine());
            int a= Integer.parseInt(st.nextToken());
            int b=Integer.parseInt(st.nextToken());
            int c=Integer.parseInt(st.nextToken());
 
            arr[a][b]=Math.min(arr[a][b],c);//노선이 여러개일 경우 원래있던값이랑 새로운값 중 비교
        }
 
 
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++){
                    arr[j][k]=Math.min(arr[j][k],arr[j][i]+arr[i][k]);
 
                }
            }
        }
 
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                if(arr[i][j]==INF){
                    System.out.print("0"+" ");
                }
                else{
                    System.out.print(arr[i][j]+" ");
                }
            }
            System.out.println();
        }
    }
}
cs

모든 지점에서 모든 지점까지 최단거리를 구할때는 플로이드 알고리즘을 쓴다!

728x90
반응형

댓글