コード例 #1
0
        public void GrowGraph(IEnumerable <double> Instructions)
        {
            List <DirectedNode> leafs = this.GetLeafs();
            int num  = 0;
            int num1 = 1;
            int num2 = checked (Instructions.Count <double>() - 1);

            for (int i = 0; i <= num2; i = checked (i + 1))
            {
                double num3 = Instructions.ElementAtOrDefault <double>(i);
                double num4 = num3;
                if (num4 == 0)
                {
                    leafs.Clear();
                    leafs = this.GetLeafs();
                    num   = 0;
                }
                else if (num4 >= 1)
                {
                    leafs.Clear();
                    leafs = this.GetLeafs();
                    num   = checked ((int)Math.Round(((double)num + num3 + (double)leafs.Count) % (double)leafs.Count));
                }
                else
                {
                    DirectedNode item = leafs[num];
                    item.AddChild(new DirectedNode(num1, num3 * item.Value));
                    num1 = checked (num1 + 1);
                    item.AddChild(new DirectedNode(num1, (1 - num3) * item.Value));
                    num1 = checked (num1 + 1);
                    num  = checked (num + 1);
                }
                if (num > checked (leafs.Count - 1))
                {
                    leafs.Clear();
                    leafs = this.GetLeafs();
                    num   = 0;
                }
            }
        }
コード例 #2
0
 public bool CollapseGraph(DirectedNode.CollapseMethod Collapse = 0, double[] CollapseValues = null)
 {
     if (CollapseValues != null)
     {
         DirectedNode.CollapseMethod collapse = Collapse;
         if (collapse == DirectedNode.CollapseMethod.LowestHighest || collapse == DirectedNode.CollapseMethod.LowestLowest)
         {
             List <DirectedNode> leafs = this.GetLeafs();
             int num = -1;
             while (leafs.Count > 1)
             {
                 int[]    numArray       = new int[checked (checked (leafs.Count - 1) + 1)];
                 double[] collapseValues = new double[checked (checked (leafs.Count - 1) + 1)];
                 int      count          = checked (leafs.Count - 1);
                 for (int i = 0; i <= count; i = checked (i + 1))
                 {
                     numArray[i]       = i;
                     collapseValues[i] = CollapseValues[i];
                 }
                 Array.Sort <double, int>(collapseValues, numArray);
                 DirectedNode item         = leafs[numArray[0]];
                 DirectedNode directedNode = null;
                 if (Collapse == DirectedNode.CollapseMethod.LowestLowest)
                 {
                     directedNode = leafs[numArray[1]];
                 }
                 else if (Collapse == DirectedNode.CollapseMethod.LowestHighest)
                 {
                     directedNode = leafs[numArray[checked ((int)numArray.Length - 1)]];
                 }
                 DirectedNode directedNode1 = new DirectedNode(num, item.Value + directedNode.Value);
                 num = checked (num - 1);
                 item.AddChild(directedNode1);
                 directedNode.AddChild(directedNode1);
                 leafs.Clear();
                 leafs = this.GetLeafs();
                 List <DirectedNode> directedNodes = new List <DirectedNode>();
                 HashSet <int>       nums          = new HashSet <int>();
                 int count1 = checked (leafs.Count - 1);
                 for (int j = 0; j <= count1; j = checked (j + 1))
                 {
                     if (!nums.Contains(leafs[j].ID))
                     {
                         directedNodes.Add(leafs[j]);
                         nums.Add(leafs[j].ID);
                     }
                 }
                 leafs = directedNodes;
             }
         }
     }
     else
     {
         DirectedNode.CollapseMethod collapseMethod = Collapse;
         if (collapseMethod == DirectedNode.CollapseMethod.LowestHighest || collapseMethod == DirectedNode.CollapseMethod.LowestLowest)
         {
             List <DirectedNode> leafs1 = this.GetLeafs();
             int num1 = -1;
             while (leafs1.Count > 1)
             {
                 int[]    numArray1 = new int[checked (checked (leafs1.Count - 1) + 1)];
                 double[] value     = new double[checked (checked (leafs1.Count - 1) + 1)];
                 int      count2    = checked (leafs1.Count - 1);
                 for (int k = 0; k <= count2; k = checked (k + 1))
                 {
                     numArray1[k] = k;
                     value[k]     = leafs1[k].Value;
                 }
                 Array.Sort <double, int>(value, numArray1);
                 DirectedNode item1 = leafs1[numArray1[0]];
                 DirectedNode item2 = null;
                 if (Collapse == DirectedNode.CollapseMethod.LowestLowest)
                 {
                     item2 = leafs1[numArray1[1]];
                 }
                 else if (Collapse == DirectedNode.CollapseMethod.LowestHighest)
                 {
                     item2 = leafs1[numArray1[checked ((int)numArray1.Length - 1)]];
                 }
                 DirectedNode directedNode2 = new DirectedNode(num1, item1.Value + item2.Value);
                 num1 = checked (num1 - 1);
                 item1.AddChild(directedNode2);
                 item2.AddChild(directedNode2);
                 leafs1.Clear();
                 leafs1 = this.GetLeafs();
                 List <DirectedNode> directedNodes1 = new List <DirectedNode>();
                 HashSet <int>       nums1          = new HashSet <int>();
                 int num2 = checked (leafs1.Count - 1);
                 for (int l = 0; l <= num2; l = checked (l + 1))
                 {
                     if (!nums1.Contains(leafs1[l].ID))
                     {
                         directedNodes1.Add(leafs1[l]);
                         nums1.Add(leafs1[l].ID);
                     }
                 }
                 leafs1 = directedNodes1;
             }
         }
     }
     return(true);
 }