Esempio n. 1
0
        public static ZDDNode CreateRootNode(int number_of_vertices)
        {
            ZDDNode node = new ZDDNode();

            node.SetNextId();
            node.deg  = new int[number_of_vertices + 1];
            node.comp = new int[number_of_vertices + 1];

            for (int i = 1; i <= number_of_vertices; ++i)
            {
                node.deg[i]  = 0;
                node.comp[i] = i;
            }
            return(node);
        }
Esempio n. 2
0
        public static ZDD Construct(State state)
        {
            List <Edge> edge_list = state.graph.GetEdgeList();

            int[]            ZeroOne = new int[] { 0, 1 };
            List <ZDDNode>[] N       = new List <ZDDNode> [edge_list.Count + 2];
            N[1] = new List <ZDDNode>();
            N[1].Add(ZDDNode.CreateRootNode(state.graph.GetNumberOfVertices()));

            for (int i = 1; i <= edge_list.Count; ++i)
            {
                N[i + 1] = new List <ZDDNode>();

                foreach (ZDDNode n_hat in N[i])
                {
                    foreach (int x in ZeroOne)
                    {
                        ZDDNode n_prime = CheckTerminal(n_hat, i, x, state);

                        if (n_prime == null)
                        {
                            n_prime = n_hat.MakeCopy();
                            UpdateInfo(n_prime, i, x, state);
                            ZDDNode n_primeprime = Find(n_prime, N[i + 1], i, state);
                            if (n_primeprime != null)
                            {
                                n_prime = n_primeprime;
                            }
                            else
                            {
                                n_prime.SetNextId();
                                N[i + 1].Add(n_prime);
                            }
                        }
                        n_hat.SetChild(n_prime, x);
                    }
                }
            }
            return(new ZDD(N));
        }
Esempio n. 3
0
        public static ZDDNode CreateRootNode(int number_of_vertices)
        {
            ZDDNode node = new ZDDNode();
            node.SetNextId();
            node.deg = new int[number_of_vertices + 1];
            node.comp = new int[number_of_vertices + 1];

            for (int i = 1; i <= number_of_vertices; ++i)
            {
                node.deg[i] = 0;
                node.comp[i] = i;
            }
            return node;
        }