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

004-01 DFSのテンプレート


DFSのテンプレートです。


C#のソース

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

    static void ExecDFS()
    {
        var Stk = new Stack<JyoutaiDef>();
        JyoutaiDef WillPush;
        WillPush.CurrX = 1234;
        WillPush.CurrY = 1234;
        WillPush.Level = 1234;
        WillPush.SumCost = 1234;
        Stk.Push(WillPush);

        var VisitedSet = new HashSet<long>();

        while (Stk.Count > 0) {
            JyoutaiDef Popped = Stk.Pop();

            // クリア判定

            Action<long , long> PushAct = (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(WillPush);
                if (VisitedSet.Add(Hash)) {
                    // Stk.Push(WillPush);
                }
            };

            // PushAct(Popped.pNewX , Popped.pNewY - 1);
            // PushAct(Popped.pNewX , Popped.pNewY + 1);
            // PushAct(Popped.pNewX - 1 , Popped.pNewY);
            // PushAct(Popped.pNewX + 1 , Popped.pNewY);
        }
    }

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