Добавил:
have_a_good_day_honey
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:граф / Main
.javaimport 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();
}
}
}