luogu P1706全排列问题

题目描述

输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入输出格式

输入格式:

n(1≤n≤9)

输出格式:

由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。

题解

这题真是道好题,用STL的好题

正常的题解是这样的(我同学的qwq)

#include<iostream>
#include<iomanip>
using namespace std;
int n;
int a[10001];
bool b[10001]={0};
void print()
{
    int i;
    for(i=1;i<=n;i++)
    cout<<setw(5)<<a[i];
    cout<<endl;
    return ;
}
void dfs(int k)
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(!b[i])
        {
            a[k]=i;
            b[i]=1;
            dfs(k+1);
            b[i]=0;
        }

    }
    if(k==n+1)
    print();

    return ;
}
int main()
{
    cin>>n;
    dfs(1);

}

然而你们以为我会手打向上边那样的代码吗(偷笑)

下边是我写的代码

#include<bits/stdc++.h>
using namespace std;
int a[11];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
        a[i]=i,printf("    %d",a[i]);
    while(next_permutation(a+1,a+1+n))
    {
        printf("\n");
        for(int i=1;i<=n;i++)
        printf("    %d",a[i]);
    }
    return 0;
}
next_permutation()STL中求下一个排列友链:http://www.slyar.com/blog/stl_next_permutation.html

原文地址:https://www.cnblogs.com/ljp20021026/p/8525225.html

时间: 2024-07-30 16:35:59

luogu P1706全排列问题的相关文章

luogu P1706 全排列问题

1 #include <iostream> 2 using namespace std; 3 int vis[10],ans[10],n; 4 void f(int x) 5 { 6 if (x == n + 1) 7 { 8 for (int i = 1;i <= n;i++) 9 cout << " " << ans[i]; 10 cout << endl; 11 return; 12 } 13 for (int i = 1;i

洛谷——P1706 全排列问题

P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 输入输出样例 输入样例#1: 复制 3 输出样例#1: 复制 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 恶心的·输出 #include<cstdio> #include<cstring> #in

洛谷 P1706 全排列问题

题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 输入输出样例 输入样例#1: 3 输出样例#1: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1代碼實現: #include<cstdio>int n,s[12];bool v[12];void qpl(int x){ if(x==n)

P1706 全排列问题

题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 输入输出样例 输入样例#1: 3 输出样例#1: 1    2    3    1    3    2    2    1    3    2    3    1    3    1    2    3    2    1 代码如下: 1 #include<io

洛谷——基础搜索

1.P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 输入输出样例 输入样例#1: 3 输出样例#1: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 (⊙v⊙)嗯~ 代码: #include<iostream> #include<cstdio> #

题解 P1706 【全排列问题】

提供一种基于排序 的 非搜索 做法 思路: 将答案数组进行二分, 以变量 \(nn\) 为界, 前半部分为有序区,后半部分为无序区 对无序区按照字典序进行排序 每次递归, 都循环从无序区中取出元素, 并加入有序区 并将边界后移一位 之后重新对无序区 按照字典序进行排序, 然后将改变后的数组作为参数, 传到下一层递归中 当有序区的长度等于 \(l\) 时, 便找到了一组解,输出即可 附上代码: #include<iostream> #include<cstring> #include

全排列(传统&amp;&amp;黑科技)

近期几次考试的一些题目暴力分都有用到全排列. 全排列是个好东西啊... 回想一下,我们最开始学到全排列是什么时候呢? 大概是学搜索的时候罢... 一.传统搜索算法 想复习可以戳 https://www.luogu.org/problemnew/show/P1706 1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<iomanip> 5 using namespace

Luogu - P1018 乘积最大 - 题解

原文:https://www.luogu.org/problemnew/solution/P1018?page=7 题目:P1018[乘积最大] 前言: 这题的正解理论上说是DP,可是由于民间数据太水,用暴力过并不难 整体思路: 利用一个b数组标记每一位之间是否分割(1位分割,0为连接). 利用STL里的 next_permutation 求出b的各种排列(即暴力枚举每种情况). 由于本题数据规模大,所以要使用高精度计算每种分割的最后结果,并找出最大. next_permutation函数: 即

生成n个元素的全排列 C实现

近期在准备复习算法设计的考试,下边记录一些,看笔记时突然想到的解法. 问题是这种 用递归实现 n 个元素的全排列. 当时老师给出的解答是 假定第i个元素 ri 放在首位,于是 f(r1,r2,-,rn) = f(ri U {r1, r2,-.,rn}) = U (ri & f(r1,r2, -, rn)), 当时应该是听懂了,只是如今看到这个笔记.又醉了. (这货竟然是我上课记的笔记 .... . .. .) 后来自己细致想想,事实上非常简单的 一个问题, 利用回溯法,把问题看成是一个排列树.能