Endlich funktionierts richtig

This commit is contained in:
joachimschmidt557 2019-03-26 14:24:14 +01:00
parent 9abf041eb2
commit a61f866171
4 changed files with 77 additions and 25 deletions

View file

@ -103,7 +103,7 @@ public class Graph<T> {
public List<Edge<T>> getEdges(Node<T> node) {
return edges.stream()
.filter(x -> x.getNodeA().equals(node) || x.getNodeB().equals(node))
.filter(x -> x.contains(node))
.collect(Collectors.toList());
}
@ -118,8 +118,7 @@ public class Graph<T> {
public Edge<T> getEdge(Node<T> nodeA, Node<T> nodeB) {
return edges.stream()
.filter(x -> x.getNodeA().equals(nodeA) && x.getNodeB().equals(nodeB) ||
x.getNodeA().equals(nodeB) && x.getNodeB().equals(nodeA))
.filter(x -> x.contains(nodeA) && x.contains(nodeB))
.findFirst()
.orElse(null);
}

View file

@ -81,18 +81,31 @@ public abstract class GraphAlgorithm<T> {
Iterator<Node<T>> iter = availableNodes.iterator();
Iterator<Node<T>> minElemIter = availableNodes.iterator();
Node<T> minNode;
AlgorithmNode<T> minAlgoNode;
Node<T> minNode = null;
AlgorithmNode<T> minAlgoNode = null;
Node<T> tempNode;
AlgorithmNode<T> tempAlgoNode;
/////
/*
minNode = availableNodes.stream().min((x, y) -> Double.compare(algorithmNodes.get(x).value, algorithmNodes.get(y).value)).orElse(null);
if (minNode != null)
System.out.println(availableNodes.remove(minNode));
if (minNode == null)
return null;
else
return algorithmNodes.get(minNode);
*/
/////
if (iter.hasNext()) {
// Set minimum to first element
minNode = iter.next();
minAlgoNode = algorithmNodes.get(minNode);
minElemIter.next();
while (iter.hasNext()) {
if (DEBUG)
@ -100,14 +113,13 @@ public abstract class GraphAlgorithm<T> {
if (DEBUG_2) {
System.out.println("gSN with size " + availableNodes.size() + " and n=" + n);
System.out.flush();
}
tempNode = iter.next();
tempAlgoNode = algorithmNodes.get(tempNode);
if (tempAlgoNode.value > 0) {
if (tempAlgoNode.value < minAlgoNode.value) {
if (tempAlgoNode.value >= 0) {
if (minAlgoNode == null || tempAlgoNode.value < minAlgoNode.value) {
// New minimum
minNode = tempNode;
minAlgoNode = tempAlgoNode;
@ -119,12 +131,22 @@ public abstract class GraphAlgorithm<T> {
}
minElemIter.remove();
//availableNodes.remove(minNode);
if (DEBUG_2)
if (minNode != null)
System.out.println("Exit gSN with sN="+minNode.getValue());
else
System.out.println("Exit gSN with sN=null");
return minAlgoNode;
}
return null;
}
/**
@ -149,6 +171,10 @@ public abstract class GraphAlgorithm<T> {
if (DEBUG_2)
System.out.println("Enter run");
if (DEBUG_2) {
}
AlgorithmNode<T> v = getSmallestNode();
while (v != null) {
@ -177,7 +203,7 @@ public abstract class GraphAlgorithm<T> {
n.value = a;
n.previous = v;
System.out.println("--" + n + " " + n.previous);
System.out.println("--" + n.node.getValue() + " " + n.previous.node.getValue());
}
@ -213,18 +239,26 @@ public abstract class GraphAlgorithm<T> {
if (prevNode == null)
return null;
//int x = 0;
while (!(prevNode.value == 0)) {
//if (x > 1000)
//return null;
//x++;
if (DEBUG_2)
System.out.println("Iteration");
AlgorithmNode<T> prevPrevNode = prevNode.previous;
if (prevNode.equals(prevPrevNode)) throw new IndexOutOfBoundsException();
if (prevPrevNode == null)
return null;
if (DEBUG_2)
System.out.println("==" + prevNode.node.getValue() + " " + prevPrevNode.node.getValue());
reversePath.add(new Edge<T>(prevPrevNode.node, prevNode.node));
prevNode = prevPrevNode;

View file

@ -17,6 +17,8 @@ public class GraphAlgoComplexityTest {
for (int i = 30; i < 50; i+=1) {
/*
Graph<Integer> g = generateGraph(i);
DumbGraphAlgorithm ga = new DumbGraphAlgorithm(g, g.getNodes().get(0));
@ -28,6 +30,8 @@ public class GraphAlgoComplexityTest {
System.out.println(i + "," + ga.getN() + "," + divN + "," + divN2 + "," + divN3);
*/
/////////////
Graph<Integer> g2 = generateGraph2(i);
@ -35,7 +39,7 @@ public class GraphAlgoComplexityTest {
ga2.run();
List<Edge<Integer>> path = ga2.getPath(g2.getNodes().get(12));
List<Edge<Integer>> path = ga2.getPath(g2.getNodes().get(2));
for (Edge<Integer> edge : path) {
System.out.println(edge.getNodeA().getValue().toString() + " " + edge.getNodeB().getValue().toString());
}
@ -79,6 +83,8 @@ public class GraphAlgoComplexityTest {
g.addEdge(nodes.get(i), nodes.get(i+1));
}
g.addEdge(nodes.get(6), nodes.get(9));
return g;
}