Endlich funktionierts richtig
This commit is contained in:
parent
9abf041eb2
commit
a61f866171
4 changed files with 77 additions and 25 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue