Tag: 组合学

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

我需要生成具有所有可能组合的数组,就像我在这里找到的这个问题: 组合:生成所有“状态” – 数组组合 我正在做一个简单的最佳图形着色工作 ,所以,我正在尝试生成所有可能的颜色组合(数组代表每个节点的颜色)。 这段代码正在运行,但也在做不必要的工作。 在这种情况下,[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] […]

比较数字然后得到中值

使用按位或比较运算符对五个整数进行排序可以通过首先得到最高数,然后是第二高,然后是第三个来实现,依此类推。 以下是获取最高编号的代码: #include int main() { int a, b, c, d, e; int aa, bb, cc, dd, ee; a = 4; b = 2; c = 5; d = 1; e = 3; aa = (a > b) ? ((a > c) ? ((a > d) ? ((a > e) ? a : e) : […]

Langford序列实现Haskell或C.

在组合数学中, Langford配对 ,也称为Langford序列,是2n数字2n 1, 1, 2, 2, …, n, n序列的排列,其中两个数字相隔一个单位,两个两个相距两个单位,更一般地,每个数字k的两个副本相隔k个单位。 例如: n = 3 Langford配对由序列2,3,1,2,1,3. 在haskell或C解决这个问题的好方法是什么 你能建议一个算法来解决它(不想使用蛮力)? – – – – – – – – – – – – – 编辑 – – – – – – – – – – – 我们如何定义数学规则以将@ Rafe的代码放入haskell中