回溯法 有n个数,输出其中r(r<=n)个数的所有组合代码使用c语言
时间: 2024-04-30 17:18:56 浏览: 91
以下使用递归实现回溯法求解组合的C语言代码:
```c
#include <stdio.h>
void combination(int arr[], int start, int n, int r, int result[], int res_idx) {
if (res_idx == r) { // 组合中已选r个数,输出结果
for (int i = 0; i < r; i++) {
printf("%d ", result[i]);
}
printf("\n");
return;
}
for (int i = start; i < n; i++) {
result[res_idx] = arr[i];
combination(arr, i + 1, n, r, result, res_idx + 1); // 递归求解下一位
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int r = 3;
int result[r];
combination(arr, 0, n, r, result, 0); // 从第一个数开始求解组合
return 0;
}
```
在这个程序中,`combination`函数接收一个数组 `arr`,一个起始位置 `start`,数组长度 `n`,组合中需要选的数的个数 `r`,一个用于存储结果的数组 `result`,以及一个当前结果数组已选的数的个数 `res_idx`。函数的作用是从数组中选取 `r` 个数,输出所有可能的组合。
函数的实现中,当 `res_idx` 等于 `r` 时,已经选出了 `r` 个数,输出结果。否则,从当前位置开始,循环遍历数组中剩余的数,将当前数加入结果数组中,并递归调用 `combination` 函数求解下一位。递归结束后,将当前数从结果数组中移除,继续循环遍历数组中的下一个数。
阅读全文