#include <stdio.h>

// 交换两个元素的值
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}
// 递归函数：生成从start到end的全排列
void permute(int arr[], int start, int end) {
    if (start == end) {
        // 基线条件：当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]);      // 回溯，恢复原来的顺序
        }
    }
}
int main() {
    int arr[] = {1, 2, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    printf("数字全排列:\n");
    permute(arr, 0, n - 1);
    
    return 0;
}