在C語言中,可以使用遞歸的方法來實現全排列。以下是一個簡單的示例:
#include<stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void permute(int arr[], int start, int end) {
if (start == end) {
for (int i = 0; i <= end; i++) {
printf("%d ", arr[i]);
}
printf("\n");
} else {
for (int i = start; i <= end; i++) {
swap((arr + start), (arr + i));
permute(arr, start + 1, end);
swap((arr + start), (arr + i)); // backtrack
}
}
}
int main() {
int arr[] = {1, 2, 3};
int n = sizeof(arr) / sizeof(arr[0]);
permute(arr, 0, n - 1);
return 0;
}
這個程序首先定義了一個swap
函數,用于交換兩個整數。然后定義了一個permute
函數,它接受一個整數數組、開始索引和結束索引作為參數。如果開始索引等于結束索引,則打印出當前排列。否則,遍歷從開始索引到結束索引的所有元素,并遞歸地調用permute
函數。在每次遞歸調用之后,需要將數組恢復到原始狀態,以便進行下一次迭代。
在main
函數中,我們創建了一個包含三個整數的數組,并調用permute
函數生成全排列。