uebung03
This commit is contained in:
70
uebung03/src/graph/Graph.java
Normal file
70
uebung03/src/graph/Graph.java
Normal file
@@ -0,0 +1,70 @@
|
||||
package graph;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Graph {
|
||||
private ArrayList<Node> nodes;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user