// ??????????????? private SortedDictionary<int, int> AmountConnectedSubGraphsPerLevel(int numberNode, int level) { var retArray = new SortedDictionary<int, int>(); if (level == container.Level) { retArray[1] = 1; return retArray; } BitArray node = container.TreeNode(level, numberNode); int powPK = Convert.ToInt32(Math.Pow(container.BranchIndex, container.Level - level - 1)); var engForConnectedComponent = new EngineForConnectedComp(); ArrayList arrConnComp = engForConnectedComponent.GetCountConnSGruph(container.nodeMatrixList(node), container.BranchIndex); for (int i = 0; i < arrConnComp.Count; i++) { var countConnCompi = (int)arrConnComp[i]; if (retArray.Keys.Contains(countConnCompi * powPK)) retArray[countConnCompi * powPK] += 1; else retArray.Add(countConnCompi * powPK, 1); } return retArray; }
private SortedDictionary<int, int> AmountConnectedSubGraphs(int numberNode, int level) { var retArray = new SortedDictionary<int, int>(); if (level == container.Level) { retArray[1] = 1; return retArray; } BitArray node = container.TreeNode(level, numberNode); bool haveOne = false; for (int i = 0; i < container.BranchIndex; i++) { if (container.CountConnectedBlocks(node, i) == 0) { SortedDictionary<int, int> array = AmountConnectedSubGraphs(numberNode * container.BranchIndex + i, level + 1); foreach (var kvt in array) { if (retArray.Keys.Contains(kvt.Key)) retArray[kvt.Key] += kvt.Value; else retArray.Add(kvt.Key, kvt.Value); } } else haveOne = true; } if (haveOne) { int powPK = Convert.ToInt32(Math.Pow(container.BranchIndex, container.Level - level - 1)); var engForConnectedComponent = new EngineForConnectedComp(); ArrayList arrConnComp = engForConnectedComponent.GetCountConnSGruph(container.nodeMatrixList(node), container.BranchIndex); for (int i = 0; i < arrConnComp.Count; i++) { var countConnCompi = (int)arrConnComp[i]; if (retArray.Keys.Contains(countConnCompi * powPK)) retArray[countConnCompi * powPK] += 1; else retArray.Add(countConnCompi * powPK, 1); } } return retArray; }