/// <summary> /// Получить отсортированный список вершин по степени /// </summary> private NodeNumberRank[] GetSortedNodesByRank(int dim, ref byte[,] adjacencyMatrix) { var nodeRankList = new NodeNumberRank[dim]; //цикл по каждой строке for (var i = 0; i < dim; i++) { var rank = 0; //цикл по каждому столбцу for (int j = 0; j < dim; j++) { //добавим степень если вершина смежна с нашей rank += adjacencyMatrix[i, j]; } nodeRankList[i] = new NodeNumberRank(i, rank); } QuickSort(ref nodeRankList, 0, nodeRankList.Length - 1); //теперь поле nodeRank будет отвечать за цвет //инициализируем все вершины как не раскрашенные for (int i = 0; i < nodeRankList.Length; i++) { nodeRankList[i].nodeRank = -1; } return(nodeRankList); }
/// <summary> /// Проверяет смежна ли вершина с какой либо другой вершиной окрашенной в этот же цвет /// </summary> /// <param name="coloredNodes"> список окрашенных вершин в выбранный цвет</param> /// <param name="adjacencyMatrix">матрица смежности</param> /// <param name="coloringNode">окрашиваемая вершина</param> private bool IsNodeAdjacentToColoredOnes(ref List <NodeNumberRank> coloredNodes, ref byte[,] adjacencyMatrix, ref NodeNumberRank coloringNode) { //цикл по всем вершинам уже окрашенным выбранным цветом for (int i = 0; i < coloredNodes.Count; i++) { if (adjacencyMatrix[coloringNode.nodeNumber, coloredNodes[i].nodeNumber] == 1) { return(true); } } //все покрашенные вершины оказались не смежными с текущей вершиной, следовательно её можно будет покрасить тем же цветом return(false); }