输出全排列(C++版)

目录

                                           输出全排列                                          

一、问题描述

二、运行环境说明

三、代码段

四、效果展示 


                                           输出全排列                                          

备注:大二(上)数据结构课程设计A题

一、问题描述

请编写程序输出前n个正整数的全排列(n<10),

并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间

输入格式:

输入给出正整数n(<10)

输出格式:

输出1到n的全排列。每种排列占一行,数字间无空格。

排列的输出顺序为字典序,即序列a​1​​,a​2​​,⋯,an​​排在序列b​1​​,b​2​​,⋯,bn​​之前,

如果存在k使得a​1​​=b​1​​,⋯,ak​​=bk​​ 并且 ak+1​​<bk+1​​

输入样例:

3

输出样例:

123

132

213

231

312

321

二、运行环境说明

三、代码段

#include <iostream>
#include <ctime>
using namespace std;

const int N = 20;

int n;
bool st[N];
int path[N];
clock_t startTime,endTime;

void dfs(int u)
{
    if(u == n)
      {
          for (int i = 0; i < n; i++)
            printf("%d",path[i]);
          puts("");
          return;
      }
      
    for (int i = 1; i <= n; i ++)
      {
          if(!st[i])
            {
                path[u] = i;
                st[i] = true;
                dfs(u+1);
                st[i] = false;
            }
      }
}

int main()
{
    cin>>n;
    
    startTime = clock();
    dfs(0);
    endTime = clock();
    cout<<"n等于"<<n<<"时,程序用时"<< (double)(endTime - startTime)/CLOCKS_PER_SEC <<"秒"<<endl;
    
    return 0;
}

四、效果展示 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值