Beispiel #1
0
 public static ZDDNode MakeInitialNode(State state)
 {
     ZDDNode node = new ZDDNode(-1);
     node.mate_ = state.MakeInitialMate();
     node.SetNextId();
     return node;
 }
Beispiel #2
0
        public static ZDDNode MakeInitialNode(State state)
        {
            ZDDNode node = new ZDDNode(-1);

            node.mate_ = state.MakeInitialMate();
            node.SetNextId();
            return(node);
        }
Beispiel #3
0
        public static PseudoZDD Construct(State state)
        {
            PseudoZDD zdd = new PseudoZDD();

            zdd.CreateRootNode(state);

            for (int edge = 1; edge <= state.GetNumberOfEdges(); ++edge)
            {
                state.Update();

                zdd.SetLevelStart();

                for (int i = 0; i < zdd.GetCurrentLevelSize(); ++i)
                {
                    ZDDNode node = zdd.GetCurrentLevelNode(i);

                    for (int child_num = 0; child_num < 2; ++child_num)
                    {
                        ZDDNode child_node = MakeChildNode(node, state, child_num, zdd);

                        if (child_node != PseudoZDD.ZeroTerminal && child_node != PseudoZDD.OneTerminal)
                        {
                            ZDDNode cand_node = zdd.FindNodeFromNextLevel(child_node, state);
                            if (cand_node != null)
                            {
                                child_node = cand_node;
                            }
                            else
                            {
                                child_node.SetNextId();
                                zdd.AddNodeToNextLevel(child_node, state);
                            }
                        }
                        zdd.SetChildNode(node, child_node, child_num);
                    }
                }
            }
            return(zdd);
        }