public void fordFulkerson(bool walkThrough) // eigentlicher Algorithmus, Walkthrough Variable gibt Auskunft darüber, welche Darstellungsart Nutzer angecklickt hat -> Schrittweise oder am Stück { vorarbeit(); // oben vorbereitet und erläuterte Vorarbeit einmalig ausführen vor Start if (run) // Test, ob Algorithmus noch ausgeführt werden soll bzw. darf { actualN = Cc.getSource(); // aktuell betrachteter Knoten ist die gewählte Quelle connectedEdges = actualN.getConnectedEdges(); // mit Quellknoten verbundene Kanten werden ermittelt und zwischengespeichert for (int i = 0; i < connectedEdges.Count; i++) //iterieren über alle am Knoten anliegenden Kanten { if (!connectedEdges[i].getVisited() && !connectedEdges[i].getEnd().Equals(actualN.getName()) && connectedEdges [i].getFlow() < connectedEdges [i].getCapacity()) // Check ob aktuell betrachtete Kante noch freie Kapazitäten für den Fluss hat, erste passende Kante wird gewählt //Blink gewählter passender Edge hier noch implementieren !!! Eigene Methode ??? { Edge actualEdge = connectedEdges [i]; // Auswahl erster passender zu betrachtender Edge minimalFlow.Add(actualEdge.getCapacity() - actualEdge.getFlow()); // kleinster Fluss wird als Referenzwert mit der maximalen Kapazität der Quelle initialisiert, CapacityMax = Dicke des Lasers, statische Zahl aus tabelle wird dargestellt if (actualN.getName().Equals(actualEdge.getStart())) { Wayforward.Add(actualEdge); // ausgewählte Kante wird dem Wegearray hinzugefügt und sich gemerkt, um später den Weg von Queelle zu Senke rekonstruieren zu können actualEdge.setVisited(true); wentForward.Add(true); } actualN = Cc.GetNodeAsObject(actualEdge.getEnd()); // zu betrachtender Knoten wird gewechselt auf den Knoten, der am Ende der Edge befindlich ist (Frage bei Rückläufigen Edges???) flowThroughEdge(actualN); } } } }
public void DeleteVertex() { nodes = ccont.GetAllNodes(); edges = ccont.getAllEdges(); //Auslesen der im Knoten anliegenden Kanten edgeStartList = rowManager.GetEdgeStartList(); edgeEndList = rowManager.GetEdgeEndList(); Debug.Log(gameObject.transform.parent.name); Debug.Log(edgeStartList.Count); int currentIndex = gameObject.transform.parent.GetSiblingIndex() - 1; Debug.Log("Tabel-Index: " + currentIndex); //Connected Edges Löschen connectedEdges = nodes[currentIndex].getConnectedEdges(); if (connectedEdges != null) { foreach (Edge e in connectedEdges) { Node tempStart = ccont.GetNodeAsObject(e.getStart()); Node tempEnd = ccont.GetNodeAsObject(e.getEnd()); if (tempStart.getName() == nodes[currentIndex].getName()) { tempEnd.getConnectedEdges().Remove(e); } else if (tempEnd.getName() == nodes[currentIndex].getName()) { tempStart.getConnectedEdges().Remove(e); } Destroy(GameObject.Find(e.getEdgeName())); Destroy(GameObject.FindGameObjectWithTag("EdgeContent").transform.Find(e.getEdgeName()).gameObject); edges.Remove(e); } } nodes.RemoveAt(currentIndex); Debug.Log("Nodes left: "); foreach (Node n in nodes) { connectedEdges = n.getConnectedEdges(); Debug.Log(n.nodeName + "Connected Edges: "); foreach (Edge e in connectedEdges) { Debug.Log(e.getEdgeName()); } } ccont.SetAllNodes(nodes); /* * for (int i = 0; i < edgeStartList.Count; i++) * { * GameObject deleteThis = null; * //Wenn ein Knoten aus der Startliste der Edges mit dem gelöschten Knoten übereinstimmt, wird die Entsprechende Kante gelöscht * * //Gameobject, dessen parent dann gelöscht wird * Debug.Log(edgeStartList[i].ToString()); * if (gameObject.transform.parent.name.Equals(edgeStartList[i].ToString()) || gameObject.transform.parent.name.Equals(edgeEndList[i].ToString())) * { * deleteThis = GameObject.Find(gameObject.transform.parent.name + "(Edge)").transform.parent.gameObject; * } * Debug.Log("Delete: " + deleteThis.name); * Destroy(deleteThis); * * } */ /* Löschen der Zeile in der Tabelle */ //Parent-Objekt initialisieren parent = gameObject.transform.parent.gameObject; //Parent-Objekt löschen Destroy(parent); /* Löschen des Knotens oder der Kante */ objectName = parent.gameObject.transform.Find("VertexName").GetComponent <Text>().text; deleteThis = GameObject.Find(objectName); Destroy(deleteThis); //Knotennummer verringern ccont.vertexCount--; }