全排列_Reference

描述

我们称n的全排列为1,2,3…,n按照一定顺序组成的序列
比如3的所有全排列为:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
现在请你生成n的所有全排列

输入

第一行一个整数n

输出

输出所有n的全排列,按照字典序从小到大输出。
字典序比较大小方法为从第一个数字开始比较,若不同则比较出来大小,否则接着比较第二位,直到比较出来大小位置。样例中就是按照字典序排序后的结果。

输入样例 1

3

输出样例 1

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

提示

数据范围:1 <= n <= 8

注意:输出结果时,每行结束后、换行前有空格

C

#include 
#include 

int order[20];
int n;
bool c[20];

void calc(int k){
    if (k == n + 1)
    {
        for (int i = 1; i <= n; i++)
        {
            printf("%d ", order[i]);
        }
        printf("\n");
        return; 
    } 
    for (int i = 1; i <= n; i++)
    {
       if (c[i])
       {
           continue;
       }
       order[k] = i;
       c[i] = 1;
       calc(k+1);
       c[i] = 0;
       
    }
}
int main(void){
    scanf("%d", &n);
    calc(1);
    return 0;
}

Reference

https://syzoj.com/submission/25246

你可能感兴趣的:(数据结构,C语言)