ACM-挑战题之排列生成

Posted 小小小的程序媛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM-挑战题之排列生成相关的知识,希望对你有一定的参考价值。

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

一自然数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-挑战题之排列生成的主要内容,如果未能解决你的问题,请参考以下文章

hdu 1521 排列组合 —— 指数型生成函数

解决方案电影标题中缺少代码的片段,完成挑战更多[关闭]

链表12:链表中删除元素的8道题之三

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

世界顶级选手的刷题之道

世界顶级选手的刷题之道