全排列问题:
题目描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入输出格式
输入格式:
n(1≤n≤9)
输出格式:
由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。
输入输出样例
输入样例#1:
3
输出样例#1:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
dfs特点:深搜,记录、递归、回溯
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n;
int index[100], arr[100];
void dfs(int i)
{
if(i == n+1) //超过了全排列范围
{
for(int i = 1; i <= n; i++)
cout << arr[i] << " ";
cout << endl;
return;
}
for(int j = 1; j <= n; j++)
{
if(index[j] == 0) //没有被排序的数字
{
index[j] = 1;
arr[i] = j;
dfs(i+1);
index[j] = 0;
}
}
}
int main(int argc, char** argv) {
cin >> n;
memset(index,0,sizeof(index));
memset(arr,0,sizeof(arr));
dfs(1);
return 0;
}