void MainWindow::BFS_lsAcc()
{
bool f;
int maxDegree = 0;
QList<Edge> bufferVertex;
for (int i = 0; i < edges.size(); i++)
bufferVertex.append(edges.at(i));
int *colors = new int[bufferVertex.size()]; //Массив для хранения возможных комбинаций цветов
for (int i = 0; i < bufferVertex.size(); i++)
colors[i] = 0;
int *bufferArray = new int[n];
for (int i = 0; i < n; i++)
bufferArray[i] = 0;
for (int i = 0; i < bufferVertex.size(); i++)
{
bufferArray[bufferVertex[i].getStart() - 1]++;
bufferArray[bufferVertex[i].getEnd() - 1]++;
}
for (int i = 0; i < n; i++)
if (bufferArray[i] > maxDegree)
maxDegree = bufferArray[i];
do
{
f = false;
for (int i = 0; i < bufferVertex.size(); i++) //Перебор возможный комбинаций цветов
if ((colors[i] + 1) != maxDegree)
{
colors[i]++;
for (int j = i - 1; j > -1; j--)
colors[j] = 0;
break;
}
colorEdges.clear();
for (int i = 0; i < maxDegree; i++) //Окраска в текущую комбинация цветов
colorEdges.append(QList<Edge>());
for (int i = 0; i < bufferVertex.size(); i++)
{
for (int j = 0; j < colorEdges[colors[i]].size(); j++)
if ((colorEdges[colors[i]][j].getStart() == bufferVertex[i].getStart()) || (colorEdges[colors[i]][j].getStart() == bufferVertex[i].getEnd()) || (colorEdges[colors[i]][j].getEnd() == bufferVertex[i].getStart()) || (colorEdges[colors[i]][j].getEnd() == bufferVertex[i].getEnd()))
{
f = true;
goto abc;
}
colorEdges[colors[i]].append(bufferVertex.at(i));
}
abc:
/*for (int i = 0; i < colorEdges.size(); i++) //Проверка правильности окраски
for (int j = 0; j < colorEdges[i].size(); j++)
for (int k = j + 1; k < colorEdges[i].size(); k++)
if ((colorEdges[i][j].getStart() == colorEdges[i][k].getStart()) || (colorEdges[i][j].getStart() == colorEdges[i][k].getEnd()) || (colorEdges[i][j].getEnd() == colorEdges[i][k].getStart()) || (colorEdges[i][j].getEnd() == colorEdges[i][k].getEnd()))
f = true;*/
if (f) //Если окрасился неправильно, проверяем не закончился ли счётчик
{
f = false;
for (int i = 0; i < bufferVertex.size(); i++)
if (colors[i] != (maxDegree - 1))
{
f = true;
break;
}
}
} while (f);
ui->minVC->setText("-не используется-");
ui->chrInd->setText(QString::number(colorEdges.size()));
delete []colors;
delete []bufferArray;
}