全排列问题
输出自然数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
一种处理数据的常用策略
这里运用dfs搜索回溯的方式解决
当然也可以直接调用全排列函数next_permutation()
#include<iostream> using namespace std; int ans[10],vis[10],n; void DFS(int x) { if(x==n)//边界 { for(int i=0;i<n;++i) { printf("%5d",ans[i]); } cout<<endl; return; } for(int i=1;i<=n;++i) { if(vis[i]==0)//看此数是否已被调用 { vis[i]=1;//标记 ans[x]=i; DFS(x+1); vis[i]=0;//回溯 } } } int main() { cin>>n; DFS(0); return 0; }

浙公网安备 33010602011771号