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); }
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)); }
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; }