По вот этому нужно найти диаметр графа и вывести номера 2 вершин и длину между ними! Очень срочно! В файле graph.txt такие значения 5 - количество вершин графа 1 2 5 каждая следующая строчка содержит по три числа - номера вершин между которыми ребро и его вес 1 3 3 1 5 4 2 4 6 2 5 2 3 4 4 import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Scanner; public class Main { private static final String PATH = "graph.txt"; public static void main(String[] args) throws IOException { int[][] graph = getGraphFromString(getInput(PATH)); printGraph(graph); System.out.println(); graph = floydAlgorithm(graph); printGraph(graph); } public static String getInput(String fileName) { StringBuilder sb = new StringBuilder(); try { Scanner scanner = new Scanner(new File(fileName)); while (scanner.hasNextLine()) { sb.append(scanner.nextLine()).append("\n"); } scanner.close(); return sb.toString().trim(); } catch (IOException ex) { ex.printStackTrace(); } return sb.toString(); } public static int[][] getGraphFromString(String str) throws IOException { String[] strings = str.split("\n"); int size = Integer.parseInt(strings[0]); int[][] graph = new int[size][size]; for (int i = 1; i < strings.length; i++) { String[] graphData = strings[i].split(" "); int graph1 = Integer.parseInt(graphData[0]) - 1; int graph2 = Integer.parseInt(graphData[1]) - 1; int weight = Integer.parseInt(graphData[2]); if (graphData.length < 3 || graph1 >= size || graph2 >= size || graph1 < 0 || graph2 < 0) throw new IOException("Wrong Input!"); graph[graph1][graph2] = weight; graph[graph2][graph1] = weight; } return graph; } static void printGraph(int[][] graph) { for (int i = 0; i < graph.length; i++) { for (int j = 0; j < graph.length; j++) System.out.print(graph[i][j] + " "); System.out.println(); } } public static int[][] floydAlgorithm(int[][] graph) { int[][] matrix = new int[graph.length][graph.length]; for (int i = 0; i < matrix.length; i++) { matrix[i] = Arrays.copyOf(graph[i], graph.length); } for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix.length; j++) { for (int k = 0; k < matrix.length; k++) { if (matrix[i][k] > 0 && matrix[k][j] > 0 && i != j) { if (matrix[i][j] == 0 || matrix[i][j] > matrix[i][k] + matrix[k][j]) { matrix[i][j] = matrix[i][k] + matrix[k][j]; } } } } } return matrix; } }