1. 程式人生 > >ACM-挑戰題之排列生成

ACM-挑戰題之排列生成

解法 str cin sin 數字 ios 控制臺應用程序 urn ont

題目描述:挑戰題之排列生成

一自然數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-挑戰題之排列生成