예제 #1
0
        /// <summary>
        /// Группирует изоморфные подграфы в новые паттерны.
        /// </summary>
        /// <param name="isomorphismGroups">Группы изоморфизма</param>
        /// <param name="potentialPatterns">Сгруппированные по инвариантам подграфы</param>
        /// <param name="matrices">Матрицы смежности подграфов</param>
        private List <Pattern> CreateNewPatterns(int[] isomorphismGroups, InvariantInstance[] potentialPatterns, AdjacencyMatrix[] matrices)
        {
            var newPatterns = new List <Pattern>();

            for (int i = 0; i < potentialPatterns.Length; i++)
            {
                if (isomorphismGroups[i] != i)
                {
                    continue;
                }

                var pattern = new Pattern(potentialPatterns[i].Key, matrices[i]);
                pattern.AddInstance(potentialPatterns[i].Vertices);

                for (int j = i + 1; j < potentialPatterns.Length; j++)
                {
                    if (isomorphismGroups[j] != i)
                    {
                        continue;
                    }
                    pattern.AddInstance(potentialPatterns[j].Vertices);
                }
                newPatterns.Add(pattern);
            }

            return(newPatterns);
        }