#include #include int bijiao(const void* a, const void* b) { return (*(int*)a - *(int*)b); } int used[100]; void dayi(int *arr, int n) { for (int i = 0; i < n; i++) { printf("%d ", arr[i]); // 添加空格以便于阅读 } printf("\n"); } void pailie(int *arr, int start, int end) { if (start == end) { dayi(arr, end + 1); } else { for (int i = start; i <= end; i++) { // 检查当前元素是否已经使用 if (!used[i]) { // 检查前一个元素是否相同且未被使用 if (i > start && arr[i] == arr[i - 1] && !used[i - 1]) { continue; // 跳过重复元素 } used[i] = 1; // 交换元素 int t = arr[start]; arr[start] = arr[i]; arr[i] = t; pailie(arr, start + 1, end); // 交换回去 t = arr[start]; arr[start] = arr[i]; arr[i] = t; used[i] = 0; } } } } int main() { int arr[] = {1, 2, 3, 4, 3, 6}; int size = sizeof(arr) / sizeof(arr[0]); // 排序以方便后续去重 qsort(arr, size, sizeof(int), bijiao); // 初始化使用标记数组 for (int i = 0; i < size; i++) { used[i] = 0; } pailie(arr, 0, size - 1); return 0; }