diff --git a/OurApplication/OurApplication.java b/OurApplication/OurApplication.java index 32fb11d..8717486 100644 --- a/OurApplication/OurApplication.java +++ b/OurApplication/OurApplication.java @@ -48,7 +48,7 @@ public class OurApplication { DirectedGraph myGraph = new DirectedGraph<>(); ExampleGraphs temp = new ExampleGraphs(); - myGraph = temp.example1(); + //myGraph = temp.example2(); //sean: Ich wollte erst hier dann das ausgewählte Beispiel reinhauen, jedoch wird das hier nur einmal am Anfang aufgerufen System.out.println(myGraph.toString()); diff --git a/graph/Edge.java b/graph/Edge.java index 1678d0c..61d3278 100644 --- a/graph/Edge.java +++ b/graph/Edge.java @@ -1,63 +1,108 @@ package graph; +/** + * Abstract class representing an edge in a graph. + */ public abstract class Edge { - // ATTRIBUTE + // ATTRIBUTES + /** The name of the edge. */ private String name; + + /** The source vertex of the edge. */ private Vertex source; + + /** The destination vertex of the edge. */ private Vertex destination; + // CONSTRUCTORS - // KONSTRUKTOREN - + /** + * Default constructor initializes the edge with empty name and null source and destination vertices. + */ public Edge() { this.name = ""; this.source = null; this.destination = null; } - + /** + * Constructor initializes the edge with a specified name, source, and destination vertices. + * + * @param s The name of the edge. + * @param n1 The source vertex of the edge. + * @param n2 The destination vertex of the edge. + */ public Edge(String s, Vertex n1, Vertex n2) { this.name = s; this.source = n1; this.destination = n2; } + // GETTERS - // GET-ER - + /** + * Retrieves the name of the edge. + * + * @return The name of the edge. + */ public String getName() { return this.name; } - + /** + * Retrieves the source vertex of the edge. + * + * @return The source vertex of the edge. + */ public Vertex getSource() { return this.source; } - + /** + * Retrieves the destination vertex of the edge. + * + * @return The destination vertex of the edge. + */ public Vertex getDestination() { return this.destination; } - + /** + * Abstract method to retrieve the screen representation of the edge for visualization. + * + * @return The visualizationElements.Edge representing the screen edge. + */ public abstract visualizationElements.Edge getScreenEdge(); + // SETTERS - // SET-ER - + /** + * Sets the name of the edge. + * + * @param s The name to set for the edge. + */ public void setName(String s) { this.name = s; } - + /** + * Sets the source vertex of the edge. + * + * @param n The source vertex to set for the edge. + */ public void setSource(Vertex n) { this.source = n; } - + /** + * Sets the destination vertex of the edge. + * + * @param n The destination vertex to set for the edge. + */ public void setDestination(Vertex n) { this.destination = n; } } + diff --git a/graph/EdgeMarking.java b/graph/EdgeMarking.java index 5243cb6..6a7a01b 100644 --- a/graph/EdgeMarking.java +++ b/graph/EdgeMarking.java @@ -1,4 +1,45 @@ package graph; -public abstract class EdgeMarking extends Marking{ -} \ No newline at end of file +/** + * Abstract class representing an edge marking. + * Extends the Marking class. + */ +public abstract class EdgeMarking extends Marking { +} + +/** + * Class representing a specific type of edge marking: edge weight. + * Inherits from EdgeMarking. + */ +class EdgeWeightMarking extends EdgeMarking { + + /** The weight value associated with this edge marking. */ + private int weight; + + /** + * Constructor to initialize the EdgeWeightMarking with a specified weight. + * + * @param weight The weight value to set. + */ + EdgeWeightMarking(int weight) { + this.weight = weight; + } + + /** + * Sets the weight value of this edge marking. + * + * @param weight The weight value to set. + */ + public void setWeight(int weight) { + this.weight = weight; + } + + /** + * Retrieves the weight value of this edge marking. + * + * @return The weight value of this edge marking. + */ + public int getWeight() { + return this.weight; + } +} diff --git a/graph/Graph.java b/graph/Graph.java index ef74af1..f95e736 100644 --- a/graph/Graph.java +++ b/graph/Graph.java @@ -6,23 +6,39 @@ import logging.LogElementList; import java.awt.*; import java.util.*; +/** + * Abstract class representing a generic graph. + * @param Type parameter for vertex markings, extends VertexMarking. + * @param Type parameter for edge markings, extends EdgeMarking. + */ public abstract class Graph { // ATTRIBUTE + /** The name of the graph. */ private String name; + + /** Vector containing all marked vertices in the graph. */ private Vector> vertexes; + + /** Vector containing all marked edges in the graph. */ private Vector> edges; // KONSTRUKTOREN + /** + * Default constructor initializes an empty graph. + */ public Graph() { this.edges = new Vector<>(); this.vertexes = new Vector<>(); } - + /** + * Constructor that initializes the graph with a given name. + * @param s The name of the graph. + */ public Graph(String s) { this(); this.name = s; @@ -31,35 +47,59 @@ public abstract class Graph { // GET-ER + /** + * Returns the name of the graph. + * @return The name of the graph. + */ public String getName() { return this.name; } - + /** + * Returns all edges in the graph. + * @return Vector containing all edges in the graph. + */ public Vector> getAllEdges() { return this.edges; } - + /** + * Returns all vertices in the graph. + * @return Vector containing all vertices in the graph. + */ public Vector> getAllVertexes() { return this.vertexes; } - + /** + * Abstract method to get the visualization representation of the graph. + * @return Visualization representation of the graph. + */ public abstract visualizationElements.Graph getScreenGraph(); - + /** + * Abstract method to get the log list associated with the graph. + * @return LogElementList containing log elements associated with the graph. + */ public abstract LogElementList getLogList(); // SET-ER + /** + * Sets the name of the graph. + * @param s The name to set for the graph. + */ public void setName(String s) { this.name = s; } // Ausgabe + /** + * Returns a string representation of the graph. + * @return String representation of the graph. + */ public String toString() { String output = ""; for (Vertex i: this.vertexes) { @@ -77,12 +117,20 @@ public abstract class Graph { // HINZUFÜGEN // Kante hinzufügen + /** + * Adds an edge to the graph. + * @param e The edge to add. + */ public void addEdge(MarkedEdge e) { this.edges.add(e); } // Knoten hinzufügen + /** + * Adds a vertex to the graph. + * @param n The vertex to add. + */ public void addVertex(MarkedVertex n) { this.vertexes.add(n); } @@ -91,12 +139,20 @@ public abstract class Graph { // LÖSCHEN // Kante löschen + /** + * Removes an edge from the graph. + * @param e The edge to remove. + */ public void removeEdge(MarkedEdge e) { this.edges.remove(e); } - - public void removeEdge(String s) throws NameDoesNotExistException{ + /** + * Removes an edge from the graph based on its name. + * @param s The name of the edge to remove. + * @throws NameDoesNotExistException If the edge with the specified name does not exist. + */ + public void removeEdge(String s) throws NameDoesNotExistException { for (MarkedEdge i: this.edges) { if (Objects.equals(i.getName(), s)) { this.removeEdge(i); @@ -108,6 +164,10 @@ public abstract class Graph { // Knoten löschen + /** + * Removes a vertex from the graph. + * @param n The vertex to remove. + */ public void removeVertex(MarkedVertex n) { for (MarkedEdge i: this.edges) { if (i.getSource() == n || i.getDestination() == n) { @@ -117,8 +177,12 @@ public abstract class Graph { this.vertexes.remove(n); } - - public void removeVertex(String s) throws NameDoesNotExistException{ + /** + * Removes a vertex from the graph based on its name. + * @param s The name of the vertex to remove. + * @throws NameDoesNotExistException If the vertex with the specified name does not exist. + */ + public void removeVertex(String s) throws NameDoesNotExistException { for (MarkedVertex i: this.vertexes) { if (Objects.equals(i.getName(), s)) { this.removeVertex(i); @@ -132,30 +196,50 @@ public abstract class Graph { // GRAPH EIGENSCHAFTEN // Kantenmenge + /** + * Returns the number of edges in the graph. + * @return The number of edges in the graph. + */ public int numberOfEdges() { return this.edges.size(); } // Knotenmenge + /** + * Returns the number of vertices in the graph. + * @return The number of vertices in the graph. + */ public int numberOfVertexes() { return this.vertexes.size(); } // Grad des Graphen - // https://loeh.app.uni-regensburg.de/teaching/discmath_ws0910/graphentheorie_ueberblick.pdf + /** + * Computes and returns the degree of the graph. + * @return The degree of the graph. + */ public int degree() { return 2 * this.edges.size(); } // Prüfung, ob Knoten im Graph + /** + * Checks if a vertex is present in the graph. + * @param n The vertex to check. + * @return True if the vertex is present, false otherwise. + */ public boolean hasVertex(MarkedVertex n) { return this.vertexes.contains(n); } - + /** + * Checks if a vertex with a specific name is present in the graph. + * @param s The name of the vertex to check. + * @return True if the vertex with the given name is present, false otherwise. + */ public boolean hasVertex(String s) { for (MarkedVertex i: this.vertexes) { if (Objects.equals(i.getName(), s)) { @@ -167,11 +251,20 @@ public abstract class Graph { // Prüfung, ob Kante im Graph + /** + * Checks if an edge is present in the graph. + * @param e The edge to check. + * @return True if the edge is present, false otherwise. + */ public boolean hasEdge(MarkedEdge e) { return this.edges.contains(e); } - + /** + * Checks if an edge with a specific name is present in the graph. + * @param s The name of the edge to check. + * @return True if the edge with the given name is present, false otherwise. + */ public boolean hasEdge(String s) { for (MarkedEdge i: this.edges) { if (Objects.equals(i.getName(), s)) { @@ -185,19 +278,28 @@ public abstract class Graph { // KNOTEN EIGENSCHAFTEN // Prüfung, ob Kante zwischen zwei Knoten - // TODO schauen, ob es Aufgabe entspricht + /** + * Checks if there is an edge between two vertices in the graph. + * @param v1 First vertex. + * @param v2 Second vertex. + * @return True if there is an edge between the vertices, false otherwise. + */ public boolean hasEdge(MarkedVertex v1, MarkedVertex v2) { for (MarkedEdge i: this.edges) { - if (i.getSource() == v1 && i.getDestination() == v2) { - return true; - } else if (i.getSource() == v2 && i.getDestination() == v1) { + if ((i.getSource() == v1 && i.getDestination() == v2) || (i.getSource() == v2 && i.getDestination() == v1)) { return true; } } return false; } - + /** + * Checks if there is an edge between two vertices identified by their names. + * @param s1 Name of the first vertex. + * @param s2 Name of the second vertex. + * @return True if there is an edge between the vertices, false otherwise. + * @throws NameDoesNotExistException If one of the vertex names does not exist in the graph. + */ public boolean hasEdge(String s1, String s2) throws NameDoesNotExistException { MarkedVertex n1 = null; MarkedVertex n2 = null; @@ -217,6 +319,12 @@ public abstract class Graph { // Prüfung, ob zwei Knoten adjazent sind + /** + * Checks if two vertices are adjacent (connected by an edge) in the graph. + * @param n1 First vertex. + * @param n2 Second vertex. + * @return True if the vertices are adjacent, false otherwise. + */ public boolean areAdjacent(MarkedVertex n1, MarkedVertex n2) { for (MarkedEdge i: this.edges) { if ((i.getSource() == n1 && i.getDestination() == n2) || (i.getSource() == n2 && i.getDestination() == n1)) { @@ -226,7 +334,13 @@ public abstract class Graph { return false; } - + /** + * Checks if two vertices identified by their names are adjacent (connected by an edge) in the graph. + * @param s1 Name of the first vertex. + * @param s2 Name of the second vertex. + * @return True if the vertices are adjacent, false otherwise. + * @throws NameDoesNotExistException If one of the vertex names does not exist in the graph. + */ public boolean areAdjacent(String s1, String s2) throws NameDoesNotExistException { MarkedVertex n1 = null; MarkedVertex n2 = null; @@ -246,6 +360,11 @@ public abstract class Graph { // Prüfung, ob Knoten eine Schlinge besitzt + /** + * Checks if a vertex has a loop (an edge connecting it to itself) in the graph. + * @param n The vertex to check. + * @return True if the vertex has a loop, false otherwise. + */ public boolean hasLoop(MarkedVertex n) { for (MarkedEdge i: this.edges) { if (i.getSource() == i.getDestination() && i.getSource() == n) { @@ -255,8 +374,13 @@ public abstract class Graph { return false; } - - public boolean hasLoop(String s) throws NameDoesNotExistException{ + /** + * Checks if a vertex identified by its name has a loop (an edge connecting it to itself) in the graph. + * @param s The name of the vertex to check. + * @return True if the vertex has a loop, false otherwise. + * @throws NameDoesNotExistException If the vertex name does not exist in the graph. + */ + public boolean hasLoop(String s) throws NameDoesNotExistException { for (MarkedVertex i: this.vertexes) { if (Objects.equals(i.getName(), s)) { return hasLoop(i); @@ -267,14 +391,29 @@ public abstract class Graph { // Methode für das Zurücksetzten der Knotenfarben - public void clearScreenGraphColor(){ - for(visualizationElements.Vertex screenVertexes : this.getScreenGraph().getVertexes()){ + /** + * Resets the screen graph colors of all vertices to black. + */ + public void clearScreenGraphColor() { + for (visualizationElements.Vertex screenVertexes : this.getScreenGraph().getVertexes()) { screenVertexes.setColor(Color.BLACK); } } - + /** + * Abstract method to find the shortest path between two vertices using Dijkstra's algorithm. + * @param n1 Starting vertex. + * @param n2 Destination vertex. + * @return Length of the shortest path between the vertices. + */ public abstract int getShortestPathDijkstra(MarkedVertex n1, MarkedVertex n2); + /** + * Abstract method to find the shortest path between two vertices using A* algorithm. + * @param n1 Starting vertex. + * @param n2 Destination vertex. + * @return Length of the shortest path between the vertices. + */ public abstract int getShortestPathAStar(MarkedVertex n1, MarkedVertex n2); } + diff --git a/graph/MarkedEdge.java b/graph/MarkedEdge.java index 1cf378d..7c75cf5 100644 --- a/graph/MarkedEdge.java +++ b/graph/MarkedEdge.java @@ -2,56 +2,92 @@ package graph; import java.awt.*; -public class MarkedEdge extends Edge{ +/** + * The MarkedEdge class extends the Edge class and includes additional attributes + * for marking and visualization on a screen. It supports constructors to initialize + * these attributes and provides getter and setter methods for accessing and modifying them. + * + * @param A type that extends EdgeMarking, used for marking the edge. + */ +public class MarkedEdge extends Edge { - // ATTRIBUTE + // ATTRIBUTES private U marking; - private visualizationElements.Edge screenEdge; + // CONSTRUCTORS - // KONSTRUKTOREN - + /** + * Default constructor initializes the edge with default values. + */ public MarkedEdge() { super(); this.screenEdge = new visualizationElements.Edge(null, null); } - + /** + * Constructor initializes the edge with a name, vertices, and marking. + * + * @param s The name of the edge. + * @param n1 The source vertex of the edge. + * @param n2 The destination vertex of the edge. + * @param u The marking of the edge. + */ public MarkedEdge(String s, Vertex n1, Vertex n2, U u) { super(s, n1, n2); this.marking = u; EdgeWeightMarking m = (EdgeWeightMarking) this.marking; - this.screenEdge = new visualizationElements.Edge(n1.getScreenVertex(), n2.getScreenVertex(), Integer.toString(m.getWeight()), Color.BLACK); + this.screenEdge = new visualizationElements.Edge( + n1.getScreenVertex(), + n2.getScreenVertex(), + Integer.toString(m.getWeight()), + Color.BLACK); } + // GETTERS - - // GET-ER - + /** + * Gets the marking of the edge. + * + * @return The marking of the edge. + */ public U getMarking() { return this.marking; } - + /** + * Gets the screen edge used for visualization. + * + * @return The screen edge. + */ public visualizationElements.Edge getScreenEdge() { return this.screenEdge; } + // SETTERS - // SET-ER - + /** + * Sets the marking of the edge. + * + * @param u The new marking of the edge. + */ public void setMarking(U u) { this.marking = u; EdgeWeightMarking m = (EdgeWeightMarking) this.marking; this.screenEdge.setMarking(Integer.toString(m.getWeight())); } + // OUTPUT - - // Ausgabe + /** + * Returns a string representation of the MarkedEdge. + * + * @return A string representing the MarkedEdge. + */ + @Override public String toString() { return "MarkedEdge " + this.getName() + " from " + this.getSource().getName() + " to " + this.getDestination().getName(); } } + diff --git a/graph/MarkedVertex.java b/graph/MarkedVertex.java index 604cdc9..60b79ec 100644 --- a/graph/MarkedVertex.java +++ b/graph/MarkedVertex.java @@ -2,20 +2,28 @@ package graph; import java.awt.*; -public class MarkedVertex extends Vertex{ +/** + * The MarkedVertex class extends the Vertex class and includes additional attributes + * for marking, coordinates, and visualization on a screen. It supports various + * constructors to initialize these attributes and provides getter and setter methods + * for accessing and modifying them. + * + * @param A type that extends VertexMarking, used for marking the vertex. + */ +public class MarkedVertex extends Vertex { // ATTRIBUTE private T marking; - private int xCord; private int yCord; - private visualizationElements.Vertex screenVertex; + // CONSTRUCTORS - // KONSTRUKTOREN - + /** + * Default constructor initializes the vertex with default values. + */ public MarkedVertex() { super(); this.screenVertex = new visualizationElements.Vertex(0, 0); @@ -23,7 +31,12 @@ public class MarkedVertex extends Vertex{ this.yCord = 0; } - + /** + * Constructor initializes the vertex with a name and marking. + * + * @param s The name of the vertex. + * @param t The marking of the vertex. + */ public MarkedVertex(String s, T t) { super(s); this.marking = t; @@ -32,7 +45,15 @@ public class MarkedVertex extends Vertex{ this.yCord = 0; } - + /** + * Constructor initializes the vertex with coordinates, name, marking, and color. + * + * @param xCord The x-coordinate of the vertex. + * @param yCord The y-coordinate of the vertex. + * @param name The name of the vertex. + * @param t The marking of the vertex. + * @param color The color of the vertex for visualization purposes. + */ public MarkedVertex(int xCord, int yCord, String name, T t, Color color) { super(name); this.marking = t; @@ -41,31 +62,51 @@ public class MarkedVertex extends Vertex{ this.yCord = yCord; } + // GETTERS - // GET-ER - + /** + * Gets the marking of the vertex. + * + * @return The marking of the vertex. + */ public T getMarking() { return this.marking; } - + /** + * Gets the screen vertex used for visualization. + * + * @return The screen vertex. + */ public visualizationElements.Vertex getScreenVertex() { return this.screenVertex; } - + /** + * Gets the coordinates of the vertex. + * + * @return An array containing the x and y coordinates of the vertex. + */ public int[] getCords() { return new int[]{this.xCord, this.yCord}; } + // SETTERS - // SET-ER - + /** + * Sets the marking of the vertex. + * + * @param t The new marking of the vertex. + */ public void setMarking(T t) { this.marking = t; } - + /** + * Sets the coordinates of the vertex and updates the screen vertex's position. + * + * @param cords An array containing the new x and y coordinates of the vertex. + */ public void setCords(int[] cords) { this.xCord = cords[0]; this.yCord = cords[1]; @@ -73,8 +114,14 @@ public class MarkedVertex extends Vertex{ this.screenVertex.setYpos(cords[1]); } + // OUTPUT - // Ausgabe + /** + * Returns a string representation of the MarkedVertex. + * + * @return A string representing the MarkedVertex. + */ + @Override public String toString() { return "MarkedVertex " + this.getName(); } diff --git a/graph/Marking.java b/graph/Marking.java index 886f210..bc06945 100644 --- a/graph/Marking.java +++ b/graph/Marking.java @@ -1,4 +1,10 @@ package graph; +/** + * Abstract class representing a marking for vertices or edges in a graph. + * This class serves as a base class for specific types of markings. + */ public abstract class Marking { + // No additional attributes or methods are defined in this abstract class. + // Specific types of markings (VertexMarking, EdgeMarking) should extend this class. } diff --git a/graph/NameDoesNotExistException.java b/graph/NameDoesNotExistException.java index 65834fc..77fe037 100644 --- a/graph/NameDoesNotExistException.java +++ b/graph/NameDoesNotExistException.java @@ -1,67 +1,134 @@ package graph; - import java.util.Comparator; -// Exception, das User nach einem ungültigen Knoten sucht +/** + * Exception thrown when a user attempts to access a non-existent vertex by name. + */ public class NameDoesNotExistException extends Exception { + + /** + * Constructs a new NameDoesNotExistException with no detail message. + */ public NameDoesNotExistException() { super(); } + /** + * Constructs a new NameDoesNotExistException with the specified detail message. + * + * @param message The detail message. + */ public NameDoesNotExistException(String message) { super(message); } + /** + * Constructs a new NameDoesNotExistException with the specified detail message and cause. + * + * @param message The detail message. + * @param cause The cause of the exception. + */ public NameDoesNotExistException(String message, Throwable cause) { super(message, cause); } + /** + * Constructs a new NameDoesNotExistException with the specified cause and a detail message + * that includes the cause's description. + * + * @param cause The cause of the exception. + */ public NameDoesNotExistException(Throwable cause) { super(cause); } } -// Element in der PriorityQueue + + + +/** + * Represents an element stored in a priority queue for graph algorithms. + * + * @param The type of vertex marking associated with the element. + */ class WrapperElement { // ATTRIBUTE - private MarkedVertex n1; - private int prio; + private MarkedVertex element; + private int priority; // KONSTRUKTOR - public WrapperElement(MarkedVertex n1, int prio) { - this.n1 = n1; - this.prio = prio; + /** + * Constructs a WrapperElement with the specified marked vertex and priority. + * + * @param element The marked vertex to wrap. + * @param priority The priority associated with the element. + */ + public WrapperElement(MarkedVertex element, int priority) { + this.element = element; + this.priority = priority; } // GET-ER + /** + * Retrieves the marked vertex stored in this wrapper element. + * + * @return The marked vertex. + */ public MarkedVertex getElement() { - return this.n1; + return this.element; } - - public int getPrio() { - return this.prio; + /** + * Retrieves the priority associated with this wrapper element. + * + * @return The priority. + */ + public int getPriority() { + return this.priority; } // Ausgabe + + /** + * Returns a string representation of this WrapperElement. + * + * @return A string representation containing the element and its priority. + */ public String toString() { - return "Wrapper with " + this.n1 + " with prio " + this.prio; + return "WrapperElement{" + + "element=" + element + + ", priority=" + priority + + '}'; } } -// 2 Elemente in der PriorityQueue Vergleichen + + +/** + * Comparator for comparing WrapperElement objects based on their priority. + * + * @param The type of vertex marking associated with the WrapperElement. + */ class WrapperComparator implements Comparator> { + /** + * Compares two WrapperElement objects based on their priorities. + * + * @param element1 The first WrapperElement to compare. + * @param element2 The second WrapperElement to compare. + * @return A negative integer, zero, or a positive integer as the first element's + * priority is less than, equal to, or greater than the second element's priority. + */ public int compare(WrapperElement element1, WrapperElement element2) { - return Integer.compare(element1.getPrio(), element2.getPrio()); + return Integer.compare(element1.getPriority(), element2.getPriority()); } } diff --git a/graph/UndirectedGraph.java b/graph/UndirectedGraph.java index efbfa4d..c377338 100644 --- a/graph/UndirectedGraph.java +++ b/graph/UndirectedGraph.java @@ -12,6 +12,13 @@ import java.util.Objects; import java.util.PriorityQueue; import java.util.Vector; +/** + * Represents an undirected graph with vertices marked by T and edges marked by U. + * Inherits from the Graph class and provides additional functionality specific to undirected graphs. + * + * @param Type of marking for vertices in the graph. + * @param Type of marking for edges in the graph. + */ public class UndirectedGraph extends Graph { // ATTRIBUTE @@ -22,6 +29,9 @@ public class UndirectedGraph ext // KONSTRUKTOREN + /** + * Constructs an empty undirected graph with default properties. + */ public UndirectedGraph() { super(); this.screenGraph = new visualizationElements.Graph(new Vector(), new Vector(), false, EdgeStyle.Direct); @@ -29,6 +39,11 @@ public class UndirectedGraph ext } + /** + * Constructs an undirected graph with a specified name. + * + * @param s The name of the graph. + */ public UndirectedGraph(String s) { super(s); this.screenGraph = new visualizationElements.Graph(new Vector(), new Vector(), false, EdgeStyle.Direct); @@ -38,16 +53,31 @@ public class UndirectedGraph ext // GET-ER + /** + * Retrieves the visualization graph associated with this undirected graph. + * + * @return The visualization graph. + */ public visualizationElements.Graph getScreenGraph() { return this.screenGraph; } + /** + * Retrieves the log list containing logging elements related to operations on this graph. + * + * @return The log element list. + */ public LogElementList getLogList() { return this.logList; } + /** + * Creates and retrieves a deep copy of the visualization graph associated with this undirected graph. + * + * @return A deep copy of the visualization graph. + */ public visualizationElements.Graph getScreenGraphCopy() { visualizationElements.Graph graphCopy = new visualizationElements.Graph(new Vector(), new Vector(), false, EdgeStyle.Direct); Vector copiedVertexes = new Vector<>(); @@ -68,14 +98,22 @@ public class UndirectedGraph ext // HINZUFÜGEN - // Kante hinzufügen + /** + * Adds an edge to the undirected graph and updates the associated visualization graph. + * + * @param e The edge to be added. + */ public void addEdge(MarkedEdge e) { super.addEdge(e); this.screenGraph.getEdges().add(e.getScreenEdge()); } - // Knoten hinzufügen + /** + * Adds a vertex to the undirected graph and updates the associated visualization graph. + * + * @param n The vertex to be added. + */ public void addVertex(MarkedVertex n) { super.addVertex(n); this.screenGraph.getVertexes().add(n.getScreenVertex()); @@ -84,14 +122,22 @@ public class UndirectedGraph ext // LÖSCHEN - // Kante löschen + /** + * Removes an edge from the undirected graph and updates the associated visualization graph. + * + * @param e The edge to be removed. + */ public void removeEdge(MarkedEdge e) { super.removeEdge(e); this.screenGraph.getEdges().remove(e.getScreenEdge()); } - // Knoten löschen + /** + * Removes a vertex from the undirected graph and updates the associated visualization graph. + * + * @param n The vertex to be removed. + */ public void removeVertex(MarkedVertex n) { super.removeVertex(n); this.screenGraph.getVertexes().remove(n.getScreenVertex()); @@ -100,7 +146,13 @@ public class UndirectedGraph ext // KNOTEN EIGENSCHAFTEN - // Prüfung des Grades eines Knotens + /** + * Returns the degree of a specified vertex in the undirected graph. + * The degree of a vertex is the number of edges incident to it. + * + * @param n The vertex for which to determine the degree. + * @return The degree of the vertex. + */ public int degree(MarkedVertex n) { int degree = 0; for (MarkedEdge i: this.getAllEdges()) { @@ -115,7 +167,14 @@ public class UndirectedGraph ext } - public int degree(String s) throws NameDoesNotExistException{ + /** + * Returns the degree of a specified vertex by its name in the undirected graph. + * + * @param s The name of the vertex for which to determine the degree. + * @return The degree of the vertex. + * @throws NameDoesNotExistException If the vertex with the specified name does not exist in the graph. + */ + public int degree(String s) throws NameDoesNotExistException { for (MarkedVertex i: this.getAllVertexes()) { if (Objects.equals(i.getName(), s)) { return degree(i); @@ -125,7 +184,12 @@ public class UndirectedGraph ext } - // Prüfung, welche Knoten Nachbarn sind + /** + * Returns a vector containing all neighbors (adjacent vertices) of a specified vertex in the undirected graph. + * + * @param n The vertex for which to retrieve neighbors. + * @return A vector of neighboring vertices. + */ public Vector> getNeighbours(MarkedVertex n) { Vector> neighbours = new Vector<>(); for (MarkedEdge i: this.getAllEdges()) { @@ -139,6 +203,13 @@ public class UndirectedGraph ext } + /** + * Computes the shortest path between two vertices using Dijkstra's algorithm in the undirected graph. + * + * @param n1 The starting vertex of the shortest path. + * @param n2 The ending vertex of the shortest path. + * @return The length of the shortest path between n1 and n2. + */ public int getShortestPathDijkstra(MarkedVertex n1, MarkedVertex n2) { // Erstellt Hashmap um Distanz von Startnoten zu jedem Knoten auf dem Graph zu tracken @@ -271,6 +342,14 @@ public class UndirectedGraph ext } + /** + * Computes the shortest path between two vertices using A* algorithm in the undirected graph. + * + * @param n1 The starting vertex of the shortest path. + * @param n2 The ending vertex of the shortest path. + * @return The length of the shortest path between n1 and n2. + */ + public int getShortestPathAStar(MarkedVertex n1, MarkedVertex n2) { // Erstellt Hashmap um Distanz von Startnoten zu jedem Knoten auf dem Graph zu tracken @@ -374,9 +453,6 @@ public class UndirectedGraph ext continue; } - // Vorgänger aktualisieren - predecessors.put(i, nextVertex.getElement()); - // Aktualisiere Distanz von Start zu nächstem Knoten distance.put(i, dist); diff --git a/graph/Vertex.java b/graph/Vertex.java index 1b828ed..de11eab 100644 --- a/graph/Vertex.java +++ b/graph/Vertex.java @@ -1,5 +1,9 @@ package graph; +/** + * Represents a vertex in a graph. + * This class serves as a base abstraction for vertices in various types of graphs. + */ public abstract class Vertex { // ATTRIBUTE @@ -9,11 +13,19 @@ public abstract class Vertex { // KONSTRUKTOREN + /** + * Constructs a vertex with an empty name. + */ public Vertex() { this.name = ""; } + /** + * Constructs a vertex with a specified name. + * + * @param s The name of the vertex. + */ public Vertex(String s) { this.name = s; } @@ -21,16 +33,32 @@ public abstract class Vertex { // GET-ER + /** + * Retrieves the name of the vertex. + * + * @return The name of the vertex. + */ public String getName() { return this.name; } + /** + * Abstract method to retrieve the visualization representation of the vertex. + * Concrete subclasses will provide specific implementations. + * + * @return The visualization representation of the vertex. + */ public abstract visualizationElements.Vertex getScreenVertex(); // SET-ER + /** + * Sets the name of the vertex. + * + * @param s The new name for the vertex. + */ public void setName(String s) { this.name = s; } diff --git a/graph/VertexMarking.java b/graph/VertexMarking.java index 5eddf22..5be5750 100644 --- a/graph/VertexMarking.java +++ b/graph/VertexMarking.java @@ -1,19 +1,61 @@ package graph; +/** + * Represents a marking associated with a vertex in a graph. + * This class serves as a base abstraction for vertex markings. + */ public abstract class VertexMarking extends Marking { + // This class currently does not have any additional attributes or methods. + // It extends Marking, inheriting its properties and behaviors. } -class VertexWeightMarking extends VertexMarking{ + + + +/** + * Represents a weight marking associated with a vertex in a graph. + * Extends {@link VertexMarking}. + */ +class VertexWeightMarking extends VertexMarking { + + // ATTRIBUTE + private int weight; - VertexWeightMarking(int weight){ + + // KONSTRUKTOREN + + /** + * Constructs a vertex weight marking with the specified weight. + * + * @param weight The weight value associated with the vertex. + */ + VertexWeightMarking(int weight) { this.weight = weight; } - public void setWeight(int weight){ - this.weight=weight; - } - public int getWeight(){ + + // GET-ER + + /** + * Retrieves the weight associated with this vertex weight marking. + * + * @return The weight of the vertex marking. + */ + public int getWeight() { return this.weight; } + + + // SET-ER + + /** + * Sets the weight associated with this vertex weight marking. + * + * @param weight The new weight value to set. + */ + public void setWeight(int weight) { + this.weight = weight; + } + } diff --git a/out/production/ProjektGraph/graph/Edge.class b/out/production/ProjektGraph/graph/Edge.class index b320ec5..0b4600c 100644 Binary files a/out/production/ProjektGraph/graph/Edge.class and b/out/production/ProjektGraph/graph/Edge.class differ diff --git a/out/production/ProjektGraph/graph/EdgeMarking.class b/out/production/ProjektGraph/graph/EdgeMarking.class index 05ea7a9..65ea2fd 100644 Binary files a/out/production/ProjektGraph/graph/EdgeMarking.class and b/out/production/ProjektGraph/graph/EdgeMarking.class differ diff --git a/out/production/ProjektGraph/graph/Graph.class b/out/production/ProjektGraph/graph/Graph.class index 1104eee..55eb7dc 100644 Binary files a/out/production/ProjektGraph/graph/Graph.class and b/out/production/ProjektGraph/graph/Graph.class differ diff --git a/out/production/ProjektGraph/graph/MarkedEdge.class b/out/production/ProjektGraph/graph/MarkedEdge.class index 64784eb..46529f1 100644 Binary files a/out/production/ProjektGraph/graph/MarkedEdge.class and b/out/production/ProjektGraph/graph/MarkedEdge.class differ diff --git a/out/production/ProjektGraph/graph/MarkedVertex.class b/out/production/ProjektGraph/graph/MarkedVertex.class index a054f33..d0d8b19 100644 Binary files a/out/production/ProjektGraph/graph/MarkedVertex.class and b/out/production/ProjektGraph/graph/MarkedVertex.class differ diff --git a/out/production/ProjektGraph/graph/Marking.class b/out/production/ProjektGraph/graph/Marking.class index 811ff70..3f7deed 100644 Binary files a/out/production/ProjektGraph/graph/Marking.class and b/out/production/ProjektGraph/graph/Marking.class differ diff --git a/out/production/ProjektGraph/graph/NameDoesNotExistException.class b/out/production/ProjektGraph/graph/NameDoesNotExistException.class index 447f0e8..b99d088 100644 Binary files a/out/production/ProjektGraph/graph/NameDoesNotExistException.class and b/out/production/ProjektGraph/graph/NameDoesNotExistException.class differ diff --git a/out/production/ProjektGraph/graph/Vertex.class b/out/production/ProjektGraph/graph/Vertex.class index 396a0b7..e08c76f 100644 Binary files a/out/production/ProjektGraph/graph/Vertex.class and b/out/production/ProjektGraph/graph/Vertex.class differ diff --git a/out/production/ProjektGraph/graph/VertexMarking.class b/out/production/ProjektGraph/graph/VertexMarking.class index cb96456..babd59b 100644 Binary files a/out/production/ProjektGraph/graph/VertexMarking.class and b/out/production/ProjektGraph/graph/VertexMarking.class differ diff --git a/out/production/ProjektGraph/graph/VertexWeightMarking.class b/out/production/ProjektGraph/graph/VertexWeightMarking.class index c8c7f53..fa75670 100644 Binary files a/out/production/ProjektGraph/graph/VertexWeightMarking.class and b/out/production/ProjektGraph/graph/VertexWeightMarking.class differ diff --git a/out/production/ProjektGraph/graph/WrapperComparator.class b/out/production/ProjektGraph/graph/WrapperComparator.class index 3e475f1..2753743 100644 Binary files a/out/production/ProjektGraph/graph/WrapperComparator.class and b/out/production/ProjektGraph/graph/WrapperComparator.class differ diff --git a/out/production/ProjektGraph/graph/WrapperElement.class b/out/production/ProjektGraph/graph/WrapperElement.class index f7c11db..b131db0 100644 Binary files a/out/production/ProjektGraph/graph/WrapperElement.class and b/out/production/ProjektGraph/graph/WrapperElement.class differ