Поиск клик графа по алгоритму Брона-Кербоша на C#
Новая программа с исходниками на языке C#. В этой программе реализуется алгоритм Брона-Кербоша (поиск всех клик неориентированного графа) с возможностью ввода начальных данных из текстового файла.
Текстовый файл вот такого формата:
Первая строка размерность матрицы, остальные - единицы и нули. В готовом проекте идет несколько файлов с примерами
В общем случае Брон-Кербош работает, рассматривая всех соседей произвольного элемента. Для каждого соседа алгоритм рассматривает клику. Если в какой-либо точке нет вершин, которые остаются как возможность, и также нет вершин, исключенных, алгоритм сообщает о максимальной клике.
По сути здесь всего два основных части: метод FindAllCliques() для поиска клик и вложенный класс VertexMatrix. В FindAllCliques() мы создаем несколько списков List: для вершин, образующих клику, для вершин графа, для «отработанных вершин» и список несмежных с вершиной вершин.
Также используются три подметода.
- SubtractSet(List<int> set, int vert) - вычитает вершину из множества.
- SubtractSet(List<int> set1, List<int> set2) - вычитает второе множество из первого
- List<int> G(int vert) – возвращает список вершин, не смежных с vert
public int[,] ReadGraphFromFile(string filename) { List<string> input = File.ReadAllText(filename).Replace("\r\n", "\n").Replace(" \n", "\n").Split('\n').ToList(); int size = Convert.ToInt32(input[0]); input.RemoveAt(0); int i = 0, j = 0; int[,] result = new int[size, size]; foreach (var row in input) { j = 0; foreach (var col in row.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)) { result[i, j] = int.Parse(col.Trim()); j++; } i++; } return (int[,])result.Clone(); }После выбора файла и нажатия «Go» в каждой строке текстбокса будет клика
В тексте программы имеются комментарии. Полный код с исходниками вы можете заказать у меня. Цена на данный момент - 500 рублей.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.