c - 在 C 中生成所有可能的数组组合 - 最佳图形着色

标签 c combinatorics

我需要生成包含所有可能组合的数组,就像我在这里找到的这个问题:

Combinatorics: generate all "states" - array combinations

我正在做一项简单的最佳图形着色工作,因此,我正在尝试生成所有可能的颜色组合(数组代表每个节点的颜色)。这段代码有效,但也在做不必要的工作。 在这种情况下,[1, 1, 2] 与 [2, 2, 1] 相同,我不需要再次测试这是否是有效图

我想不出任何东西,但首先我想知道是否有一个简单的代码来做我想做的事。

现在,我的代码是这样的:

void generatearray(int array[], int array_size, int idx){

    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++){
        array[idx] = i;
        generatearray(array, array_size, idx+1);
    }

}

它会打印:

    [0, 0, 0]
    [0, 0, 1]
    [0, 0, 2]
    [0, 0, 3]
    [0, 1, 0]
    [0, 1, 1]
    ...
    [3, 3, 0]
    [3, 3, 1]
    [3, 3, 2]
    [3, 3, 3]

最佳答案

试试这个:

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[6];
generatearray( arr, 6 );

旧的破答案:

void generatearray(int array[], int array_size, int idx){

   int i;

   if(idx == array_size){
       putchar('\n');
       for(i = 0; i < array_size; i++) printf("%i ", array[i]);

   }
   else if ( idx == 0 ) {
       array[idx] = 0;
       generatearray(array, array_size, idx+1);
   } else {
       for(i = 0; i <= 3; i++){
       array[idx] = i;
       generatearray(array, array_size, idx+1);
       }

   }
}

关于c - 在 C 中生成所有可能的数组组合 - 最佳图形着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444084/

相关文章:

objective-c - 多少()宏 objective-c

c - 带有资源 ID 的工具窗口

c - 如何知道中断后内核开始执行的时间?

algorithm - 不重复地计算来自多个列表的成对项目的组合

c - fork 的可能组合数

c - 使用两个结构变量对结构数组进行排序?

与 feof 的语法比较

python - 在每个可能的组合中调用函数

python-3.x - python : finding all pallindromic sequences of length k that sum to n

algorithm - 国际象棋-算法,指定跳跃