static void dikstra(int[][] E, int startV) {
        
        
        int[][] edge = new int[V][V];
        for (int i = 0; i < V; i++) {
            Arrays.fill(edge[i], Integer.MAX_VALUE / 100);
            edge[i][i] = 0;
        }
        // 各辺のコストをedgeに当てはめる。
        for (int[] is : E) {
            edge[is[0]][is[1]] = is[2];
            edge[is[1]][is[0]] = is[2];
        }
        
        int[] dp = new int[V];
        Arrays.fill(dp, Integer.MAX_VALUE / 100);
        dp[startV] = 0;
        
        boolean[] used = new boolean[V];
        
        for (int i = 0; i < V; i++) {
            int minV = -1;
            int min = Integer.MAX_VALUE;
            for (int j = 0; j < V; j++) {
                if(! used[j] && min > dp[j]) {
                    min = dp[j];
                    minV = j;
                }
            }
            
            used[minV] = true;
            
            for (int j = 0; j < V; j++) {
                if (minV == j) continue;
                dp[j] = Math.min(dp[j], dp[minV] + edge[minV][j]);
            }
        }
        
        for (int i = 0; i < V; i++) {
           System.out.print(dp[i] + " ");
        }
        
    }