コード例 #1
0
ファイル: 1644392.cs プロジェクト: qifanyyy/CLCDSA
        public void Run(int f)
        {
            cost = new long[I]; for (int i = 0; i < I; ++i)
            {
                cost[i] = INF;
            }
            cost[f] = 0;
            var pq = new PQueue <edge>(); pq.Enqueue(new edge(f, 0L));

            while (!pq.Empty())
            {
                var cur = pq.Dequeue();
                if (cost[cur.to] < cur.cost)
                {
                    continue;
                }
                for (int i = 0; i < Adj[cur.to].Count; ++i)
                {
                    var tmp = Adj[cur.to][i];
                    if (cost[tmp.to] > cur.cost + tmp.cost)
                    {
                        cost[tmp.to] = cur.cost + tmp.cost;
                        pq.Enqueue(new edge(tmp.to, cost[tmp.to]));
                    }
                }
            }
        }
コード例 #2
0
        public long MinCost(int f, int t)
        {
            cost = new long[I]; for (int i = 0; i < I; ++i)
            {
                cost[i] = INF;
            }
            cost[f] = 0;
            var pq = new PQueue <Tuple <int, long> >(); pq.Enqueue(Tuple.Create(f, 0L));//(from,cost)

            while (pq.Count > 0)
            {
                var cur = pq.Dequeue();
                if (cost[cur.Item1] < cur.Item2)
                {
                    continue;
                }
                for (int i = 0; i < Adj[cur.Item1].Count; ++i)
                {
                    var tmp = Adj[cur.Item1][i];
                    if (cost[tmp.Item1] > cost[cur.Item1] + tmp.Item2)
                    {
                        cost[tmp.Item1] = cost[cur.Item1] + tmp.Item2; pq.Enqueue(Tuple.Create(tmp.Item1, cost[tmp.Item1]));
                    }
                }
            }
            return(cost[t]);
        }
コード例 #3
0
        static void Main(string[] args)
        {
            //Создадим массив с беспорядочным расположением сотрудников
            Work[] empsRandom =
            {
                new Work(Employes.Manager,    100, 10),
                new Work(Employes.Supervisor, 101, 20),
                new Work(Employes.Worker,     102, 30),
                new Work(Employes.Manager,    103, 40),
                new Work(Employes.Supervisor, 104, 50),
                new Work(Employes.Manager,    105, 10),
                new Work(Employes.Manager,    106, 20),
                new Work(Employes.Worker,     107, 30),
                new Work(Employes.Supervisor, 108, 40),
                new Work(Employes.Worker,     109, 50)
            };

            //Запишем данные в файл
            Write(empsRandom);

            //Запичем данные в очередь приоритетов
            PQueue <Work> empsOrder = new PQueue <Work>();

            Read(empsOrder);

            //Запишем упорядоченные данные в файл
            int[] summTime = new int[3];
            Work  item;

            using (StreamWriter Write = new StreamWriter("OrderList.txt"))
            {
                Write.WriteLine("Должность\t\tНомер\tВремя\n");

                while (!empsOrder.IsEmpty)
                {
                    item = empsOrder.PDequeue();

                    summTime[(int)item.Employ] += item.Time;

                    Write.WriteLine(Enum.GetName(item.Employ.GetType(), item.Employ).PadLeft(10)
                                    + item.ID.ToString().PadLeft(10) + item.Time.ToString().PadLeft(5));
                }

                Write.WriteLine("\n");
                Write.WriteLine($"Manager       {summTime[(int)Employes.Manager]}");
                Write.WriteLine($"Worker        {summTime[(int)Employes.Worker]}");
                Write.WriteLine($"Supervisor    {summTime[(int)Employes.Supervisor]}");
            }
        }
コード例 #4
0
        static void Read(PQueue <Work> emps)
        {
            Work item = new Work(Employes.Manager, 0, 0);

            FileInfo f = new FileInfo("work.txt");

            using (BinaryReader br = new BinaryReader(f.OpenRead()))
            {
                while (br.BaseStream.Position < br.BaseStream.Length)
                {
                    item.Employ = (Employes)br.ReadInt32();
                    item.ID     = br.ReadInt32();
                    item.Time   = br.ReadInt32();
                    br.BaseStream.Position++;

                    emps.PEnqueue((int)item.Employ, item);
                }
            }
        }
コード例 #5
0
    class Dijkstra : ShortestPath {//?????????,????
        public long MinCost(int f, int t)
        {
            cost = new long[I]; cost.Set(INF); cost[f] = 0;
            var pq = new PQueue <Tuple <int, long> >(); pq.Enqueue(Tuple.Create(f, 0L));//(from,cost)

            while (pq.Count > 0)
            {
                var cur = pq.Dequeue();
                if (cost[cur.Item1] < cur.Item2)
                {
                    continue;
                }
                Adj[cur.Item1].Count.REP(i => {
                    var tmp = Adj[cur.Item1][i];
                    if (cost[tmp.Item1] > cost[cur.Item1] + tmp.Item2)
                    {
                        cost[tmp.Item1] = cost[cur.Item1] + tmp.Item2; pq.Enqueue(Tuple.Create(tmp.Item1, cost[tmp.Item1]));
                    }
                });
            }
            return(cost[t]);
        }
コード例 #6
0
ファイル: 1514650.cs プロジェクト: qifanyyy/CLCDSA
        public long GetMinCost(long f, long t)
        {
            long[] w = new long[Index];
            M.REP(Index, i => w[i] = INF); w[f] = 0;
            var pq = new PQueue <Tuple <long, long> >(); pq.Enqueue(Tuple.Create(0L, f));//cost<-from

            while (pq.Count > 0)
            {
                var c = pq.Dequeue(); if (c.Item2 < c.Item1)
                {
                    continue;
                }
                M.REP(Index, i => {
                    long w2i = m[c.Item2, i] == INF ? INF : c.Item1 + m[c.Item2, i];
                    if (w2i < w[i])
                    {
                        w[i] = w2i; pq.Enqueue(Tuple.Create(w2i, (long)i));
                    }
                });
            }
            return(w[t]);
        }
コード例 #7
0
ファイル: 1644392.cs プロジェクト: qifanyyy/CLCDSA
 //void Stream() { Test(); io.writeFlush(); }
 void Test()
 {
     var pq = new PQueue <int>(1);
 }
コード例 #8
0
ファイル: 1644041.cs プロジェクト: qifanyyy/CLCDSA
 //void Stream() { Test(); io.writeFlush(); }
 void Test()
 {
     var pq = new PQueue <edge>(1);
 }