private void BFS(Network network, int start, int end, int size, ref long[] parent) { Queue <long> queue = new Queue <long>(); parent = Enumerable.Repeat <long>(-1, size).ToArray(); bool[] marked = new bool[size]; queue.Enqueue(start); marked[start] = true; while (queue.Count > 0) { long current = queue.Dequeue(); foreach (int id in network.GetIds(current)) { Edge e = network.GetEdge(id); if (parent[e.End] == -1 && e.Capacity > 0 && !marked[e.End]) { parent[e.End] = id; queue.Enqueue(e.End); marked[e.End] = true; } } } }
private long GetOverlaidCharts(Network network, long stockCount) { int count = 0; for (int i = 1; i <= stockCount; i++) { foreach (var id in network.GetIds(i)) { if (network.GetEdge(id).Flow > 0) { count++; break; } } } return(stockCount - count); }
private long[] AssignJobs(Network network, long flightCount) { long[] result = Enumerable.Repeat <long>(-1, (int)flightCount).ToArray(); for (int i = 0; i < flightCount; i++) { foreach (int id in network.GetIds(i + 1)) { Edge e = network.GetEdge(id); if (e.Flow == 1) { result[i] = e.End - flightCount; break; } } } return(result); }