#include <cstdio>
#include <algorithm>
const int MAXN = 10;
bool used[MAXN + 1];
int n, a[MAXN + 1];
void search(int i)
{
if (i == n + 1)
{
for (int i = 1; i <= n; i++) printf("%d%c", a[i], i == n ? '\n' : ' ');
return;
}
for (int j = 1; j <= n; j++)
{
if (!used[j])
{
used[j] = true;
a[i] = j;
search(i + 1);
used[j] = false;
}
}
}
void print_permutation(int n, int *A, int cur) //用*A傳A數組
{
if (cur == n) //遞歸邊界
{
for (int i = 0; i < n; i++) printf("%d ", A[i]);
printf("\n");
}
else for (int i = 1; i <= n; i++) //嘗試在A[cur]中填各種整數i
{
int ok = 1;
for (int j = 0; j < cur; j++)
if (A[j] == i) ok = 0; //即i已經在A[0]~A[cur-1]中出現過
if (ok) //說明i沒有在序列中出現過
{
A[cur] = i; //把它添加到序列末尾
print_permutation(n, A, cur + 1); //遞歸調用
}
}
}
int main()
{
scanf("%d", &n);
search(1);
static int a[MAXN + 1];
for (int i = 1; i <= n; i++) a[i] = i;
do
{
for (int i = 1; i <= n; i++) printf("%d%c", a[i], i == n ? '\n' : ' ');
}
while (std::next_permutation(a + 1, a + n + 1)); //如果循環完了就會返回一個false
//next_permutation傳的參數和sort一樣
}
這三種隨便寫一種就行
【代碼其中之一來自紫書,其他的來自Menci,註釋是我自己加的啦(:з」∠)】