public Graph Clone() { var nodeDictionary = new Dictionary <GraphNode, GraphNode>(); var copyOfGraph = new Graph(); foreach (GraphNode node in Nodes) { var copyOfNode = new GraphNode(node.Position, node.Name, node.Info, node.Style); nodeDictionary[node] = copyOfNode; // соответствие между старой и новой ссылкой copyOfGraph.AddNode(copyOfNode); } foreach (GraphNode markedNode in MarkedNodes) { copyOfGraph.markedNodes.Add(nodeDictionary[markedNode]); } foreach (GraphWay way in Ways) { var copyOfWay = new GraphWay(nodeDictionary[way.From], nodeDictionary[way.To], way.Weight, way.Oriented); copyOfWay.WeightIsLen = way.WeightIsLen; copyOfWay.Style = way.Style; copyOfGraph.AddWay(copyOfWay); } return(copyOfGraph); }
public override object Execute(Graph graph) { ValidateGraph(graph); var sortedWays = new List <GraphWay>(graph.Ways) .OrderBy(w => w.Weight).ToList(); // delete all ways graph.RemoveWay(w => true); var listNodesInList = new List <List <GraphNode> >(); // лист компонент связанности foreach (GraphWay way in sortedWays) { if (!InOneComponentsConnectedness(way.From, way.To, listNodesInList)) { graph.AddWay(way); } } return(graph); }