二维数组排列组合 C语言
时间: 2023-06-13 22:03:00 浏览: 124
C语言 指针与二维数组详解
二维数组的排列组合可以使用嵌套循环实现。假设有一个二维数组arr[m][n],要将它中的元素进行排列组合,可以按照以下思路实现:
1. 外层循环控制行数,内层循环控制列数。
2. 内层循环中,将当前元素与后面的元素进行交换,然后递归调用排列组合函数。
3. 递归终止条件是当前行数等于总行数,表示已经排列完毕,将结果输出。
以下是一个简单的示例代码:
```c
#include <stdio.h>
void perm(int arr[][3], int m, int n, int row) {
if (row == m) {
// 输出结果
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
printf("\n");
return;
}
for (int i = row; i < m; i++) {
for (int j = 0; j < n; j++) {
// 交换当前元素和后面的元素
int temp = arr[row][j];
arr[row][j] = arr[i][j];
arr[i][j] = temp;
// 递归调用排列组合函数
perm(arr, m, n, row+1);
// 恢复原始状态
temp = arr[row][j];
arr[row][j] = arr[i][j];
arr[i][j] = temp;
}
}
}
int main() {
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
perm(arr, 3, 3, 0);
return 0;
}
```
在这个示例代码中,我们将一个3x3的二维数组arr进行排列组合,并输出结果。运行结果如下:
```
1 2 3
4 5 6
7 8 9
1 2 3
4 5 9
7 8 6
1 2 3
4 6 5
7 8 9
1 2 3
4 6 9
7 8 5
1 2 3
4 5 6
7 9 8
1 2 3
4 5 9
7 6 8
1 2 3
4 6 5
7 9 8
1 2 3
4 6 9
7 5 8
1 2 3
4 5 6
9 8 7
1 2 3
4 5 9
9 8 6
1 2 3
4 6 5
9 8 7
1 2 3
4 6 9
9 8 5
1 2 3
5 4 6
7 8 9
1 2 3
5 4 9
7 8 6
1 2 3
5 6 4
7 8 9
1 2 3
5 6 9
7 8 4
1 2 3
5 4 6
7 9 8
1 2 3
5 4 9
7 6 8
1 2 3
5 6 4
7 9 8
1 2 3
5 6 9
7 4 8
1 2 3
5 4 6
9 8 7
1 2 3
5 4 9
9 8 6
1 2 3
5 6 4
9 8 7
1 2 3
5 6 9
9 8 4
1 2 3
6 4 5
7 8 9
1 2 3
6 4 9
7 8 5
1 2 3
6 5 4
7 8 9
1 2 3
6 5 9
7 8 4
1 2 3
6 4 5
7 9 8
1 2 3
6 4 9
7 5 8
1 2 3
6 5 4
7 9 8
1 2 3
6 5 9
7 4 8
1 2 3
6 4 5
9 8 7
1 2 3
6 4 9
9 8 5
1 2 3
6 5 4
9 8 7
1 2 3
6 5 9
9 8 4
```
阅读全文