OJ 系统未解决或者有疑问问题:
34101 - 全排列问题
时间限制 : 1 秒
内存限制 : 128 MB
输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入
n(1≤n≤9)
输出
由 1~n 组成的所有不重复的数字序列,每行一个序列。(每个数字占5位输出)
样例
输入
3
输出
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<stdio.h>
using namespace std;int i, j;
const int maxn = 10;
int digit[maxn], temp[maxn];
bool judge[maxn];
int n;inline void f(int cnt)
{int i;if (cnt == n){for (i = 0; i < n; i++){printf("%5d", temp[i]);}cout << endl;}for (i = 0; i < n; i++){if (judge[i] == 0){judge[i] = 1;temp[cnt] = digit[i];f(cnt + 1);judge[i] = 0;}}
}int main()
{cin >> n;for (int i = 0; i < n; i++){digit[i] = i + 1;}f(0);return 0;
}
这道题用到了回溯,对回溯不是很清楚,得系统学习一下数据结构的知识。