首页 > 其他 > 详细

ACM-挑战题之排列生成

时间:2018-03-10 13:28:23      阅读:241      评论:0      收藏:0      [点我收藏+]

题目描述:挑战题之排列生成

一自然数N,设N为3,则关于N的字典序排列为123,132,213,231,312,321。对于一个自然数N(1<= N <= 9 ) , 你要做的便是生成它的字典序排列。

输入

第一行为自然数N。

输出

输出对应于N的字典序排列,每个排列占一行。

样例输入

3

样例输出

123
132
213
231
312
321

思路:两种解法:1.按照位置放数字 2.按照数字放位置。
备注:使用数字和保存结果,直接输出每次结果即可,不然的话需要输出数组,增加时间消耗。。

// 挑战题之排列生成.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"


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

const int MAX = 100;
int n, vis[MAX];

void DFS(int pos,int ans)
{
    if (pos == n) { printf("%d\n", ans); return; }

    for (int i = 1; i <= n; i++)
    {
        if (!vis[i])
        {
            vis[i] = 1;            
            DFS(pos + 1, 10 * ans + i);
            vis[i] = 0;
        }
    }
}

int main()
{
    while (cin >> n)
        DFS(0, 0);


    return 0;
}

 

ACM-挑战题之排列生成

原文:https://www.cnblogs.com/x739400043/p/8538708.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!