你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

【洛谷】P1706 全排列问题

2021/12/31 3:55:10

题目地址:

https://www.luogu.com.cn/problem/P1706

题目描述:
按照字典序输出自然数 1 1 1 n n n所有不重复的排列,即 n n n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入格式:
一个整数 n n n

输出格式:
1 ∼ n 1 \sim n 1n组成的所有不重复的数字序列,每行一个序列。每个数字保留 5 5 5个场宽。

数据范围:
1 ≤ n ≤ 9 1\le n\le 9 1n9

代码如下:

#include <iostream>
using namespace std;

const int N = 10;
int n;
int a[N];
bool vis[N];

void dfs(int u) {
    if (u == n + 1) {
        for (int i = 1; i <= n; i++)
            printf("%5d", a[i]);
        puts("");
        return;
    }

    for (int i = 1; i <= n; i++)
        if (!vis[i]) {
            a[u] = i;
            vis[i] = true;
            dfs(u + 1);
            vis[i] = false;
        }
}

int main() {
    scanf("%d", &n);
    dfs(1);
    return 0;
}

时间复杂度 O ( n n ! ) O(nn!) O(nn!),空间 O ( n ) O(n) O(n)