Parcourir la source

Fehler beim betrachten der Kanden in der Block Kalkulation

Kolja Strohm il y a 6 ans
Parent
commit
6d2f2231a0

+ 1 - 1
src/Algorithms/Animated/BK/BlockCalc.java

@@ -52,7 +52,7 @@ public class BlockCalc implements AlgorithmStage {
 			if( subgraphAlgs.get( layerIndex ).get( nodeIndex ).forwardStep() == StageStatus.UNFINISHED )
 			if( subgraphAlgs.get( layerIndex ).get( nodeIndex ).forwardStep() == StageStatus.UNFINISHED )
 				return StageStatus.UNFINISHED;
 				return StageStatus.UNFINISHED;
 		}
 		}
-		ArrayList< LayeredGraphEdge > incommingEdges = current.getIncomingEdges();
+		ArrayList< LayeredGraphEdge > incommingEdges = current.getSortedIncomingEdges();
 		if( incommingEdges.size() == 0 )
 		if( incommingEdges.size() == 0 )
 		{
 		{
 			backwards.add( 0, () -> {
 			backwards.add( 0, () -> {

+ 22 - 0
src/Model/LayeredGraphNode.java

@@ -65,6 +65,16 @@ public interface LayeredGraphNode {
      * @return Liste mit Kanten
      * @return Liste mit Kanten
      */
      */
     ArrayList< LayeredGraphEdge > getIncomingEdges();
     ArrayList< LayeredGraphEdge > getIncomingEdges();
+    /**
+     * Ermittelt eine Liste von Kanten, die an diesem Knoten beginnen
+     * @return Liste mit Kanten sortiert nach den positionen der Endknoten in ihrem layer
+     */
+    ArrayList< LayeredGraphEdge > getSortedOutgoingEdges();
+    /**
+     * Ermittelt eine Liste von Kanten, die an diesem Knoten enden
+     * @return Liste mit Kanten sortiert nach den positionen der Startknoten in ihrem layer
+     */
+    ArrayList< LayeredGraphEdge > getSortedIncomingEdges();
     /**
     /**
      * Gibt den Knoten zur�ck, zu dessen Subgraph dieser Knoten geh�rt
      * Gibt den Knoten zur�ck, zu dessen Subgraph dieser Knoten geh�rt
      * @return Der Elternknoten
      * @return Der Elternknoten
@@ -158,12 +168,24 @@ public interface LayeredGraphNode {
      * @return Die Liste mit Kanten
      * @return Die Liste mit Kanten
      */
      */
     ArrayList< LayeredGraphEdge > getOutgoingEdges( LayeredGraphNode n );
     ArrayList< LayeredGraphEdge > getOutgoingEdges( LayeredGraphNode n );
+    /**
+     * Ermittelt eine Liste von ausgehenden Kanten eines Knotens
+     * @param n Der Knoten
+     * @return Die Liste mit Kanten sortiert nach den positionen der Endknoten in ihren Layern
+     */
+    ArrayList< LayeredGraphEdge > getSortedOutgoingEdges( LayeredGraphNode n );
     /**
     /**
      * Ermittelt eine Liste von eingehenden Kanten eines Knotens
      * Ermittelt eine Liste von eingehenden Kanten eines Knotens
      * @param n Der Knoten
      * @param n Der Knoten
      * @return Die Liste mit Kanten
      * @return Die Liste mit Kanten
      */
      */
     ArrayList< LayeredGraphEdge > getIncomingEdges( LayeredGraphNode n );
     ArrayList< LayeredGraphEdge > getIncomingEdges( LayeredGraphNode n );
+    /**
+     * Ermittelt eine Liste von eingehenden Kanten eines Knotens
+     * @param n Der Knoten
+     * @return Die Liste mit Kanten sortiert nach den positionen der Startknoten in ihren Layern
+     */
+    ArrayList< LayeredGraphEdge > getSortedIncomingEdges( LayeredGraphNode n );
     
     
     /**
     /**
      * F�gt einen neuen Knoten zum Subgraph hinzu
      * F�gt einen neuen Knoten zum Subgraph hinzu

+ 44 - 0
src/Model/LayeredNode.java

@@ -325,12 +325,22 @@ public class LayeredNode implements LayeredGraphNode {
     public ArrayList<LayeredGraphEdge> getOutgoingEdges() {
     public ArrayList<LayeredGraphEdge> getOutgoingEdges() {
         return parent.getOutgoingEdges( this );
         return parent.getOutgoingEdges( this );
     }
     }
+    
+    @Override
+    public ArrayList<LayeredGraphEdge> getSortedOutgoingEdges() {
+        return parent.getSortedOutgoingEdges( this );
+    }
 
 
     @Override
     @Override
     public ArrayList<LayeredGraphEdge> getIncomingEdges() {
     public ArrayList<LayeredGraphEdge> getIncomingEdges() {
         return parent.getIncomingEdges( this );
         return parent.getIncomingEdges( this );
     }
     }
 
 
+    @Override
+    public ArrayList<LayeredGraphEdge> getSortedIncomingEdges() {
+        return parent.getSortedIncomingEdges( this );
+    }
+
     @Override
     @Override
     public ArrayList<LayeredGraphEdge> getContainedEdges() {
     public ArrayList<LayeredGraphEdge> getContainedEdges() {
         return edges;
         return edges;
@@ -378,6 +388,40 @@ public class LayeredNode implements LayeredGraphNode {
         return result;
         return result;
     }
     }
 
 
+    @Override
+    public ArrayList<LayeredGraphEdge> getSortedOutgoingEdges(LayeredGraphNode n) {
+        ArrayList<LayeredGraphEdge> result = new ArrayList<>();
+    	if( n.getLayer() + 1 >= layers.size() )
+    		return result;
+        ArrayList< LayeredGraphEdge > unsorted = getOutgoingEdges( n );
+        for( LayeredGraphNode node : layers.get( n.getLayer() + 1 ) )
+        {
+        	for( LayeredGraphEdge e : unsorted )
+            {
+                if( e.getSources().contains( node ) )
+                	result.add( e );
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public ArrayList<LayeredGraphEdge> getSortedIncomingEdges(LayeredGraphNode n) {
+        ArrayList<LayeredGraphEdge> result = new ArrayList<>();
+    	if( n.getLayer() - 1 < 0 )
+    		return result;
+        ArrayList< LayeredGraphEdge > unsorted = getIncomingEdges( n );
+        for( LayeredGraphNode node : layers.get( n.getLayer() - 1 ) )
+        {
+        	for( LayeredGraphEdge e : unsorted )
+            {
+                if( e.getSources().contains( node ) )
+                	result.add( e );
+            }
+        }
+        return result;
+    }
+
     @Override
     @Override
     public LayeredGraphNode createNode(ElkNode original) {
     public LayeredGraphNode createNode(ElkNode original) {
         LayeredGraphNode n = new LayeredNode( original, this );
         LayeredGraphNode n = new LayeredNode( original, this );