#include<stdio.h>
#include<stdlib.h>
bool ok(int x[], int k, bool c[][10], int n) {
int i;
for (i = 0; i < 10; i++) {
if (c[k][i] && (x[k] == x[i]))
return false;
}
return true;
}
bool m_coloring(int n, int m, int x[], bool c[][10]) {
int i, k;
for (i = 0; i < n; i++)
x[i] = 0;
k = 0;
while (k >= 0) {
x[k] = x[k] + 1;
while ((x[k] <= m) && (!ok(x, k, c, n)))
x[k] = x[k] + 1;
if (x[k] <= m) {
if (k == n - 1)break;
else k = k + 1;
}
else {
x[k] = 0; k = k - 1;
}
}
if (k == n - 1) return true;
else return false;
}
int main() {
int n = 10;
int m = 4;
int x[10];
bool c[10][10];
int y[30][2] = { {1,2},{2,3},{3,4},{4,5},{5,6},{7,8},{8,9},{0,9},{0,3},{0,5},{0,6},{0,7},{1,3},{1,5},{1,6},{1,7},{2,4},{2,5},{2,6},{2,9},{3,6},{3,7},{3,8},{4,6},{4,7} ,{4,8},{5,9},{5,8},{6,9},{7,9} };
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
c[i][j] = false;
}
}
for (int i = 0; i < 30; i++) {
c[y[i][0]][y[i][1]] = c[y[i][1]][y[i][0]] = true;
}
bool p = m_coloring(n, m, x, c);
if (p = true) {
for (int i = 0; i < 10; i++)
printf("%d\t", x[i]);
}
else { printf("error"); }
return 0;
}
m着色问题
最新推荐文章于 2024-07-24 20:44:05 发布