Скачиваний:
0
Добавлен:
13.01.2023
Размер:
2.66 Кб
Скачать
import java.io.IOException;
import java.util.List;
import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {

    private static final Integer MAX_VERTEXES = 9;
    private static final Integer MAX_EDGES = 50;

    public static void main(String[] args) throws IOException {

        DirectedGraph<Integer> directedGraph = new DirectedGraph<>();

        fillGraph(directedGraph);

        System.out.println("========Matrix========");
        toMatrix(directedGraph);
        System.out.println("========Dijkstra Algorithm========");
        System.out.println("========Main vertex is 0========");
        findDistancesDijkstra(directedGraph);
        System.out.println("========Floyd Algorithm========");
        findDistancesFloyd(directedGraph);
    }

    private static <T> void toMatrix(DirectedGraph<T> directedGraph){
        directedGraph.createMatrix().forEach(System.out::println);
    }

    private static void fillGraph(DirectedGraph<Integer> directedGraph){

        for (int i = 0; i < MAX_VERTEXES; i++) {
            directedGraph.addVertex(i);
        }

        Random random = new Random();
        for (int i = 0; i < MAX_EDGES; i++) {
            int from = random.nextInt(9);
            int to = random.nextInt(9);
            while (from == to){
                to = random.nextInt(9);
            }
            int distance = random.nextInt(5) + 1;
            directedGraph.addEdge(from, to, distance);
        }
    }

    //0 vertex is main
    private static void findDistancesDijkstra(DirectedGraph<Integer> directedGraph) {
        List<Integer> result = directedGraph.minDistancesDijkstra(directedGraph.createMatrix(), 0);
        System.out.println("Vertex\tMinimum Distance From Main");
        AtomicInteger counter = new AtomicInteger(0);
        result.forEach(value -> System.out.println(counter.getAndIncrement() + "\t\t" + value));
    }

    private static void findDistancesFloyd(DirectedGraph<Integer> directedGraph){
        List<List<Integer>> result = directedGraph.floydWarshall(directedGraph.createMatrix());
        System.out.print(0 + "/\t");
        for (int i = 0; i < result.size(); i++) {
            System.out.print(i + "\t");
        }
        System.out.println("\n=====================================");
        for (int i = 0; i < result.size(); i++) {
            System.out.print(i + "/\t");
            for (int j = 0; j < result.get(i).size(); j++) {
                System.out.print(result.get(i).get(j) + "\t");
            }
            System.out.println();
        }
    }
}
Соседние файлы в папке граф