华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4775|回复: 18
打印 上一主题 下一主题

P1706 全排列问题

[复制链接]

738

主题

1485

帖子

5422

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
5422
跳转到指定楼层
#
发表于 2018-5-10 12:06:19 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
题目描述
输出自然数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

回复

使用道具 举报

2

主题

105

帖子

306

积分

中级会员

Rank: 3Rank: 3

积分
306
推荐
发表于 2018-5-12 11:56:06 | 只看该作者
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <map>
  6. #include <string>
  7. #include <vector>
  8. #include <queue>
  9. #include <stack>
  10. #include <cstdio>
  11. #include <cstdlib>
  12. using namespace std;
  13. int a[20],book[20],n;
  14. void dfs(int cnt)
  15. {
  16.         if(cnt==n+1)
  17.         {
  18.                 for(int i=1;i<=n;i++)
  19.                         printf("%5d",a[i]);
  20.                 printf("\n");
  21.                 return;
  22.         }
  23.         for(int i=1;i<=n;i++)
  24.                 if(!book[i])
  25.                 {
  26.                         book[i]=1,a[cnt]=i;
  27.                         dfs(cnt+1);
  28.                         book[i]=0;
  29.                 }
  30. }
  31. int main()
  32. {  
  33.         scanf("%d",&n);
  34.         dfs(1);
  35.     return 0;
  36. }
复制代码
回复 支持 1 反对 0

使用道具 举报

0

主题

4

帖子

53

积分

注册会员

Rank: 2

积分
53
17#
发表于 2020-8-5 10:08:57 | 只看该作者
  1. #include<iostream>
  2. using namespace std;
  3. int a[11]={0,1,2,3,4,5,6,7,8,9},n;
  4. bool b[11]={0,1,1,1,1,1,1,1,1,1};
  5. void pr()
  6. {
  7.         for(int i=1;i<=n;i++) cout<<"    "<<a[i];
  8.         cout<<endl;
  9. }
  10. void pmn(int i)
  11. {
  12.         if(i>n) pr();
  13.         else
  14.         {
  15.                 for(int k=1;k<=n;k++)
  16.                 {
  17.                         if(b[k]==1)
  18.                         {
  19.                                 a[i]=k;
  20.                                 b[k]=0;
  21.                                 pmn(i+1);
  22.                                 b[k]=1;
  23.                         }
  24.                 }
  25.         }
  26. }
  27. int main()
  28. {
  29.         cin>>n;
  30.         pmn(1);
  31.         return 0;
  32. }
复制代码
回复 支持 反对

使用道具 举报

9

主题

26

帖子

111

积分

禁止发言

积分
111
16#
发表于 2018-9-4 17:02:03 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

14

主题

106

帖子

317

积分

中级会员

Rank: 3Rank: 3

积分
317
15#
发表于 2018-9-1 22:17:07 | 只看该作者
特别无聊地上STL algorithm 中的神奇函数
  1. #include<iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. int main(){
  5.     int n,p[10],i;
  6.     cin>>n;
  7.     for(i=0;i<n;i++) p[i]=i;
  8.     do{
  9.         for(i=0;i<n;i++) cout<<p[i]<<" ";
  10.         cout<<endl;
  11.     }while(next_permutation(p,p+n));  //求下一个排列
  12.     return 0;
  13. }
复制代码
回复 支持 反对

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
14#
发表于 2018-7-12 13:52:14 | 只看该作者
  1. #include<iostream>
  2. #include<iomanip>
  3. using namespace std;
  4. int n,a[10];
  5. bool b[10];
  6. void dfs(int x)
  7. {
  8.     int i;
  9.     if(x==n+1)
  10.     {
  11.         for(i=1; i<=n; i++)
  12.             cout<<setw(5)<<a[i];
  13.         cout<<endl;
  14.         return;
  15.     }
  16.     else
  17.         for(i=1; i<=n; i++)
  18.         {
  19.             if(!b[i])
  20.             {
  21.                 b[i]=true;
  22.                 a[x]=i;
  23.                 dfs(x+1);
  24.                 b[i]=false;
  25.             }

  26.         }
  27. }
  28. int main()
  29. {
  30.     cin>>n;
  31.     dfs(1);
  32.     return 0;
  33. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

2

帖子

16

积分

新手上路

Rank: 1

积分
16
13#
发表于 2018-6-16 16:06:01 | 只看该作者
  1. #include <iostream>
  2. using namespace std;
  3. int n;
  4. bool x[10];
  5. int a[10];
  6. void  dfs(int i)
  7. {
  8.   
  9.     if(i==n)
  10.     {
  11.         for(int q=0;q<n;q++) cout<<a[q]<<" "; cout<<endl;
  12.     }
  13.     else
  14.     {
  15.         for(int j=1;j<=n;j++)   
  16.         {
  17.             if(x[j])
  18.             {
  19.                 a[i]=j;
  20.                 x[j]=false;
  21.                 dfs(i+1);
  22.                 x[j]=true;
  23.             }
  24.         }
  25.     }
  26. }
  27. int main()
  28. {
  29.     cin>>n;
  30.     for(int ans=1;ans<=n;ans++)
  31.     x[ans]=1;
  32.     dfs(0);
  33.     return 0;
  34. }
复制代码
回复 支持 反对

使用道具 举报

0

主题

1

帖子

16

积分

新手上路

Rank: 1

积分
16
12#
发表于 2018-6-12 16:47:32 | 只看该作者
#include<iostream>
#include<iomanip>
using namespace std;
int a[11];
bool vis[11];
int n;
void dfs(int plc)
{
    if(plc>n)
    {
        for(int i=1;i<=n;i++)
            cout<<setw(5)<<a[i];
        cout<<endl;

        return;
    }
    for(int i=1;i<=n;i++)
    {
        if(!vis[i])
        {
            vis[i]=1;
            a[plc]=i;
            dfs(plc+1);
            vis[i]=0;
        }
    }


}

int main()
{
    cin>>n;
    dfs(1);
    return 0;
}
回复 支持 反对

使用道具 举报

0

主题

17

帖子

82

积分

注册会员

Rank: 2

积分
82
11#
发表于 2018-6-9 15:05:39 | 只看该作者
  1. #include<iostream>
  2. #include<iomanip>
  3. using namespace std;
  4. int a[105],b[105];
  5. int n;
  6. void hhh(int i)
  7. {
  8.     int j,k;
  9.     if(i>=n+1)
  10.     {
  11.         for(j=1;j<=n;j++)
  12.             cout<<setw(5)<<a[j];
  13.         cout<<endl;
  14.         return;
  15.     }
  16.     else for(k=1;k<=n;k++)
  17.     {
  18.         if(b[k]==0)
  19.         {
  20.             a[i]=k;
  21.             b[k]=1;
  22.             hhh(i+1);
  23.             b[k]=0;
  24.         }
  25.     }
  26. }
  27. int main()
  28. {
  29.     cin>>n;
  30.     hhh(1);
  31.     return 0;
  32. }
复制代码
回复 支持 反对

使用道具 举报

13

主题

41

帖子

211

积分

中级会员

Rank: 3Rank: 3

积分
211
10#
发表于 2018-5-21 12:52:30 | 只看该作者
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
int a[10],n;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) a[i]=i;
    do
    {
        for(int i=1;i<=n;i++) cout<<setw(5)<<a[i]; cout<<endl;
    }while(next_permutation(a+1,a+1+n));
    return 0;
}
回复 支持 反对

使用道具 举报

2

主题

17

帖子

74

积分

注册会员

Rank: 2

积分
74
9#
发表于 2018-5-16 16:48:15 | 只看该作者
  1. #include<cstdio>
  2. const int maxn = 15;
  3. int n,c[maxn];
  4. void print(int cur){
  5.     if(cur == n){
  6.         for(int i = 0; i < n;i++)
  7.             printf("%5d",c[i]);
  8.         printf("\n");
  9.     }
  10.     else{
  11.         for(int i = 1;i <= n;i++){
  12.             int ok  = 1;
  13.             for(int j = 0;j < cur;j++){
  14.                 if(i == c[j]){ok = 0;break;}
  15.             }
  16.             if(ok){c[cur] = i;print(cur+1);}
  17.         }
  18.     }
  19. }
  20. int main(){
  21.     scanf("%d",&n);
  22.     print(0);
  23.     return 0;
  24. }

复制代码


注意精简自己的程序
回复 支持 反对

使用道具 举报

0

主题

30

帖子

91

积分

注册会员

Rank: 2

积分
91
8#
发表于 2018-5-13 21:22:22 | 只看该作者
  1. #include <cstdio>
  2. int a[10],n,book[10];
  3. void dfs(int step)
  4. {
  5.         if(step==n+1)
  6.         {
  7.                 for(int i=1;i<=n;i++)
  8.                         printf("%5d",a[i]);
  9.                 printf("\n");
  10.         }
  11.         else
  12.                 for(int i=1;i<=n;i++)
  13.                         if(book[i]==0)
  14.                         {
  15.                                 a[step]=i;
  16.                                 book[i]=1;
  17.                                 dfs(step+1);
  18.                                 book[i]=0;
  19.                                 a[step]=0;
  20.                         }
  21. }
  22. int main()
  23. {
  24.         scanf("%d",&n);
  25.         dfs(1);
  26.         return 0;
  27. }
复制代码

范彦廷提交
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-12-25 02:29 , Processed in 0.117235 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表