| 333 | } |
| 334 | |
| 335 | static void uncolorSameNeighbors(std::queue<int> &uncolored, int *coloring, const int *const *edgeMatrix, int vertex, int vertexCount) { |
| 336 | for (int i = vertex+1; i < vertexCount; ++i) { |
| 337 | if (edgeMatrix[vertex][i] && coloring[i] == coloring[vertex]) { |
| 338 | coloring[i] = -1; |
| 339 | uncolored.push(i); |
| 340 | } |
| 341 | } |
| 342 | for (int i = 0; i < vertex; ++i) { |
| 343 | if (edgeMatrix[vertex][i] && coloring[i] == coloring[vertex]) { |
| 344 | coloring[i] = -1; |
| 345 | uncolored.push(i); |
| 346 | } |
| 347 | } |
| 348 | } |
| 349 | |
| 350 | static bool tryAddEdge(int *coloring, int *const *edgeMatrix, int vertexCount, int vertexA, int vertexB, int *coloringBuffer) { |
| 351 | static const int FIRST_POSSIBLE_COLOR[8] = { -1, 0, 1, 0, 2, 2, 1, 0 }; |