/
NikolayIvkin
/
TheAlgorithms
Обзор
Документация
Войти
/
NikolayIvkin
/
TheAlgorithms
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/main/java/com/thealgorithms/datastructures/graphs/Graphs.java
140 строк
4 KB
vaibhav9t1
style: enable `MultipleVariableDeclarations` in checkstyle (#5175)
25 май 2024, 21:18
Не верифицирован
25 май 2024, 21:18
9eaa2bb
Код
Авторство
О чём код?
package com.thealgorithms.datastructures.graphs; import java.util.ArrayList; class AdjacencyListGraph<E extends Comparable<E>> { ArrayList<Vertex> vertices; AdjacencyListGraph() { vertices = new ArrayList<>(); } private class Vertex { E data; ArrayList<Vertex> adjacentVertices; Vertex(E data) { adjacentVertices = new ArrayList<>(); this.data = data; } public boolean addAdjacentVertex(Vertex to) { for (Vertex v : adjacentVertices) { if (v.data.compareTo(to.data) == 0) { return false; // the edge already exists } } return adjacentVertices.add(to); // this will return true; } public boolean removeAdjacentVertex(E to) { // use indexes here so it is possible to // remove easily without implementing // equals method that ArrayList.remove(Object o) uses for (int i = 0; i < adjacentVertices.size(); i++) { if (adjacentVertices.get(i).data.compareTo(to) == 0) { adjacentVertices.remove(i); return true; } } return false; } } /** * this method removes an edge from the graph between two specified * vertices * * @param from the data of the vertex the edge is from * @param to the data of the vertex the edge is going to * @return returns false if the edge doesn't exist, returns true if the edge * exists and is removed */ public boolean removeEdge(E from, E to) { Vertex fromV = null; for (Vertex v : vertices) { if (from.compareTo(v.data) == 0) { fromV = v; break; } } if (fromV == null) { return false; } return fromV.removeAdjacentVertex(to); } /** * this method adds an edge to the graph between two specified vertices * * @param from the data of the vertex the edge is from * @param to the data of the vertex the edge is going to * @return returns true if the edge did not exist, return false if it * already did */ public boolean addEdge(E from, E to) { Vertex fromV = null; Vertex toV = null; for (Vertex v : vertices) { if (from.compareTo(v.data) == 0) { // see if from vertex already exists fromV = v; } else if (to.compareTo(v.data) == 0) { // see if to vertex already exists toV = v; } if (fromV != null && toV != null) { break; // both nodes exist so stop searching } } if (fromV == null) { fromV = new Vertex(from); vertices.add(fromV); } if (toV == null) { toV = new Vertex(to); vertices.add(toV); } return fromV.addAdjacentVertex(toV); } /** * this gives a list of vertices in the graph and their adjacencies * * @return returns a string describing this graph */ @Override public String toString() { StringBuilder sb = new StringBuilder(); for (Vertex v : vertices) { sb.append("Vertex: "); sb.append(v.data); sb.append("\n"); sb.append("Adjacent vertices: "); for (Vertex v2 : v.adjacentVertices) { sb.append(v2.data); sb.append(" "); } sb.append("\n"); } return sb.toString(); } } public final class Graphs { private Graphs() { } public static void main(String[] args) { AdjacencyListGraph<Integer> graph = new AdjacencyListGraph<>(); assert graph.addEdge(1, 2); assert graph.addEdge(1, 5); assert graph.addEdge(2, 5); assert !graph.addEdge(1, 2); assert graph.addEdge(2, 3); assert graph.addEdge(3, 4); assert graph.addEdge(4, 1); assert !graph.addEdge(2, 3); System.out.println(graph); } }