uebung03
This commit is contained in:
21
uebung03/src/graph/Edge.java
Normal file
21
uebung03/src/graph/Edge.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package graph;
|
||||
|
||||
public class Edge {
|
||||
private int length;
|
||||
private final Node target;
|
||||
|
||||
public Edge (int lenght, Node target) {
|
||||
this.target = target;
|
||||
this.length = lenght;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "-" + length + "->" + target.getName();
|
||||
}
|
||||
|
||||
public Node getTarget() {
|
||||
return target;
|
||||
}
|
||||
|
||||
}
|
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();
|
||||
}
|
||||
}
|
44
uebung03/src/graph/Node.java
Normal file
44
uebung03/src/graph/Node.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package graph;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
public class Node {
|
||||
private final String name;
|
||||
private ArrayList<Edge> out = new ArrayList<>();
|
||||
private boolean marked;
|
||||
|
||||
public Node(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public ArrayList<Edge> getOut() {
|
||||
return out;
|
||||
}
|
||||
|
||||
public boolean getMarked() {
|
||||
return marked;
|
||||
}
|
||||
|
||||
public void setMarked(boolean n) {
|
||||
marked = n;
|
||||
}
|
||||
|
||||
public void addEdge(Edge e) {
|
||||
if (out.contains(e)) {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
out.add(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name + ": " + out;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user