Exemple #1
0
        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;
                    }
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }