我再次进行了优化图形着色的工作,因此,我需要为图形生成所有可能的颜色组合(数组代表每个节点的颜色)。正如您在这个问题中看到的那样,我在这里得到了很多帮助:
现在,我的代码是:
void generatearray( int array[], int array_size, int idx = 0, int fixed = 0 )
{
int i;
if ( idx == array_size )
{
putchar('\n');
for( i = 0; i < array_size; i++ ) printf( "%i ", array[i] );
} else {
for( i = 0; i <= 3; i++ )
{
if ( fixed == i )
{
fixed++;
array[idx] = i;
return generatearray( array, array_size, idx + 1, fixed );
}
array[idx] = i;
generatearray( array, array_size, idx + 1, fixed );
}
}
}
int arr[3];
generatearray( arr, 3 );
在这种情况下,输出将是:
0 0 0
0 0 1
0 1 0
0 1 1
0 1 2
如果 0 表示蓝色,2 表示红色,在 Graph 着色中,red-red-red 与 blue-blue-blue 相同。这就是我的代码所做的:它为图形生成所有可能的不同颜色组合。
现在我需要改进我的代码,但我什么都想不出来。我希望它只生成具有给定颜色数量的数组,因为我使用的是 pthreads,并且我希望每个线程处理具有多种颜色的图形。
例如:使用 2 种颜色,输出将是:
0 0 1
0 1 0
0 1 1
并有 3 种颜色:
1 2 3
我不需要它来创建颜色少于数字集的数组,因为还有另一个线程在做这件事。
你们中的任何人都可以帮我写代码吗?对不起,如果我没有在任何时候说清楚。