码迷,mamicode.com
首页 > 其他好文 > 详细

【第二章例题2-4】排列问题

时间:2019-10-02 22:54:58      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:生成   i++   class   就是   mes   题解   排列   end   例题   

输入n个数字,输出它的所有排列

【题解】


总体的思路就是先产生一个数字的排列
①->从后面n-1个数字中挑一个数字到第一个位置上替换它(n-1)个方案.
②生成后面n-1数字的排列。
一直重复这个两个步骤就可以了
(感觉是比之前那种flag[]数组法好用的方法)

【代码】

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

const int N = 10;

int n;
int a[N+10];
int cnt = 0;

void dfs(int k,int m){
    if (k==m+1){
        cout<<++cnt<<":";
        for (int i = 1;i <= m;i++){
            cout<<a[i]<<' ';
        }
        cout<<endl;
        return;
    }
    for (int i = k;i <= m;i++){
        swap(a[k],a[i]);
        dfs(k+1,m);
        swap(a[k],a[i]);
    }
}

int main(){
    cin >> n;
    for (int i = 1;i <= n;i++) cin >> a[i];
    dfs(1,n);
    return 0;
}

【第二章例题2-4】排列问题

标签:生成   i++   class   就是   mes   题解   排列   end   例题   

原文地址:https://www.cnblogs.com/AWCXV/p/11618636.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!