コード例 #1
0
 public MaxFlow(Graph <TNodeId, TNodeData, TEdgeId, TEdgeData> graph, List <Edge <TEdgeData, TEdgeId, TNodeId> > edges)
 {
     Result = new MaxFlowResult <TNodeId, TNodeData, TEdgeId, TEdgeData>();
     foreach (var edge in edges)
     {
         Result.EdgeToFlow[edge.Id] = 0;
     }
     this.graph = graph;
     level      = new Dictionary <TNodeId, int>();
     init();
 }
コード例 #2
0
        private void ModifyResult(List <List <List <TEdgeId> > > edges, MaxFlowResult <TNodeId, TNodeData, TEdgeId, TEdgeData> result)
        {
            var edgeSet = new HashSet <Edge <TEdgeData, TEdgeId, TNodeId> >();
            var nodeSet = new HashSet <Node <TNodeData, TNodeId> >();

            foreach (var list in edges)
            {
                foreach (var item in list)
                {
                    foreach (var edge in item)
                    {
                        var tempEdge = graph.EdgeIdToEdge[edge];
                        edgeSet.Add(tempEdge);
                        nodeSet.Add(graph.NodeIdToNode[tempEdge.Source]);
                        nodeSet.Add(graph.NodeIdToNode[tempEdge.Target]);
                    }
                }
            }

            result.GraphContainer = new GraphContainer <TNodeId, TNodeData, TEdgeId, TEdgeData>(nodeSet.ToList(), edgeSet.ToList());
        }