Files
oopuebung/uebung03/src/graph/Graph.java
2025-05-02 13:54:37 +02:00

71 lines
1.9 KiB
Java

package graph;
import java.util.ArrayList;
public class Graph {
private ArrayList<Node> nodes = new ArrayList<>();
public ArrayList<Node> getNodes() {
return nodes;
}
public Node getFirstNode() {
return nodes.get(0);
}
public void addNode(Node n) {
if (nodes.contains(n)) {
throw new IllegalArgumentException();
}
nodes.add(n);
}
public ArrayList<Node> depthFirst(Node startNode) {
unmarkAllNodes();
final ArrayList<Node> collect = new ArrayList<>();
search(startNode, collect);
return collect;
}
private void search(Node node, ArrayList<Node> collect) {
if (node.getMarked()) return;
node.setMarked(true);
collect.add(node);
for (Edge e : node.getOut())
search(e.getTarget(), collect);
}
public ArrayList<Node> breadthFirst(Node startNode) {
unmarkAllNodes();
final ArrayList<Node> collect = new ArrayList<>();
startNode.setMarked(true);
collect.add(startNode);
// Die folgende For-Schleife kann nicht als foreach-loop
// realisiert werden, weil sich collect laufend ändert
for (int i = 0; i < collect.size(); i++)
for (Edge edge : collect.get(i).getOut()) {
final Node target = edge.getTarget();
if (!target.getMarked()) {
target.setMarked(true);
collect.add(target);
}
}
return collect;
}
private void unmarkAllNodes() {
for (Node n : nodes)
n.setMarked(false);
}
@Override
public String toString() {
StringBuilder str = new StringBuilder();
str.append("Grap=\n");
for (Node n : nodes) {
str.append(n).append(";\n");
}
return str.toString();
}
}