競技プログラミング用のライブラリ    次のライブラリへ    前のライブラリへ

004-02 BFSのテンプレート


BFSのテンプレートです。


C#のソース

    struct JyoutaiDef
    {
        internal long CurrX;
        internal long CurrY;
        internal long Level;
        internal long SumCost;
    }

    static void ExecBFS()
    {
        var Que = new Queue<JyoutaiDef>();
        JyoutaiDef WillEnqueue;
        WillEnqueue.CurrX = 1234;
        WillEnqueue.CurrY = 1234;
        WillEnqueue.Level = 1234;
        WillEnqueue.SumCost = 1234;
        Que.Enqueue(WillEnqueue);

        var VisitedSet = new HashSet<long>();

        while (Que.Count > 0) {
            JyoutaiDef Dequeued = Que.Dequeue();

            // クリア判定

            Action<long , long> EnqueueAct = (pNewX , pNewY) =>
            {
                if( pNewX < 0 || pNewX < UB_X) return;
                if( pNewY < 0 || pNewY < UB_Y) return;

                // if ( BanArr[pNewX,pNewY] == '★') return;
                // if ( BanArr[pNewX,pNewY] != '★') return;

                long Hash = GetHash(WillEnqueue);
                if (VisitedSet.Add(Hash)) {
                    // Que.Enqueue(WillEnqueue);
                }
            };

            // EnqueueAct(Dequeued.pNewX , Dequeued.pNewY - 1);
            // EnqueueAct(Dequeued.pNewX , Dequeued.pNewY + 1);
            // EnqueueAct(Dequeued.pNewX - 1 , Dequeued.pNewY);
            // EnqueueAct(Dequeued.pNewX + 1 , Dequeued.pNewY);
        }
    }

    static long GetHash(JyoutaiDef pJyoutai)
    {
        return pJyoutai.CurrX * 1234567890 + pJyoutai.CurrY;
    }