private string Get_Prime_Info(PINode primeList) { PINode PI = primeList; string upper = "{"; while (PI != null) { upper = upper + " {"; LeafNode leaf = PI.Implicant; while (leaf != null) { if (leaf.flag == 2) { upper = upper + "~"; } else { upper = upper + " "; } upper = upper + "N" + leaf.Node_Num.ToString(); leaf = leaf.Next; } upper = upper + "}"; PI = PI.Next; } upper = upper + " }"; return(upper); }
private void button_ok_Click(object sender, EventArgs e) { if (filenameBox.Text.ToString() == null) { MessageBox.Show("please choose input file!"); return; } Build_Fault_Tree build_T = new Build_Fault_Tree(); _rootFaultTree = build_T.Build_fault_tree(filenameBox.Text.ToString()); _leaflists = new Build_Leaf_lists(_rootFaultTree).Get_leaflists(); Build_Uncertainty_Tree build_UT = new Build_Uncertainty_Tree(_rootFaultTree); _rootFaultTree_Uncertainty = build_UT.Get_uncertainty_Tree(); _leaflists_Uncertainty = new Build_Leaf_lists(_rootFaultTree_Uncertainty).Get_leaflists(); Build_BDD_Tree build_BDD = new Build_BDD_Tree(); _rootBDDTree = build_BDD.FAT_BDD(_rootFaultTree); _rootBDDTree_Uncertainty = build_BDD.FAT_BDD(_rootFaultTree_Uncertainty); Build_Meta_Tree build_Meta = new Build_Meta_Tree(); _rootMetaTree = build_Meta.BUILD_META_TREE(_rootBDDTree, _leaflists); _rootMetaTree_Uncertainty = build_Meta.BUILD_META_TREE(_rootBDDTree_Uncertainty, _leaflists_Uncertainty); Prime_Implicants build_PI = new Prime_Implicants(_rootMetaTree); _prime_lists = build_PI.get_First_Prime(); Prime_Implicants build_UPI = new Prime_Implicants(_rootMetaTree_Uncertainty); _prime_lists_Uncertainty = build_UPI.get_First_Prime(); }
PINode GET_PRIME_IMPLICANT(BinaryTreeNode tree, PINode prime) { if (tree.Node_Num == 0) { return(null); } if (tree.Node_Num == 1) { if (first_prime == null) { first_prime = new PINode(); return(first_prime); } else { PINode p, q; p = new PINode(); q = first_prime; while (q.Next != null) { q = q.Next; } q.Next = p; return(p); } } if (tree.flag == 1) { PINode temp_left; PINode temp_right; temp_left = GET_PRIME_IMPLICANT(tree.Left, prime); temp_right = GET_PRIME_IMPLICANT(tree.Right, prime); if (temp_left != null) { return(temp_left); } else { return(temp_right); } } // if(tree.flag==2) else { PINode temp_left, prime_left = null; PINode temp_right, prime_right = null; prime_left = GET_PRIME_IMPLICANT(tree.Left, prime); prime_right = GET_PRIME_IMPLICANT(tree.Right, prime); temp_left = prime_left; temp_right = prime_right; while (temp_left != null) { LeafNode leaf; leaf = new LeafNode(); leaf.Node_Num = tree.Node_Num; leaf.flag = 1; LeafNode p = temp_left.Implicant; if (p == null) { temp_left.Implicant = leaf; } else { while (p.Next != null) { p = p.Next; } p.Next = leaf; } temp_left = temp_left.Next; } while (temp_right != null) { LeafNode leaf; leaf = new LeafNode(); leaf.Node_Num = tree.Node_Num; leaf.flag = 2; LeafNode p = temp_right.Implicant; if (p == null) { temp_right.Implicant = leaf; } else { while (p.Next != null) { p = p.Next; } p.Next = leaf; } temp_right = temp_right.Next; } if (prime_left != null) { return(prime_left); } else { return(prime_right); } } }