//2020.4.25 第五天了、加油
题目:递归实现排列型枚举
链接:https://ac.nowcoder.com/acm/contest/998/C
来源:牛客网
题目描述:把1∼n 这 n(n<10)个整数排成一行后随机打乱顺序,输出所有可能的次序。
求解之路:
遇到了全排列,第一想法就是先确定第一位,然后确定第二位,依次继续。其中一个确认完了就输出,然后返回上一层。所以需要一个数组去存每次的顺序,用完了就需要重置。一个vis 数组去记录已经访问过的序列。
#include <iostream>
using namespace std;
int N;
int num[13],vis[13];
void DFS(int n){
for(int i = 1;i <= N;i++){
if(!vis[i]){
vis[i] = 1;
num[n] = i;
DFS(n+1);
vis[i] = 0;
}
}
if(n == N){
for(int i = 1;i <= N;i++)
cout << num[i] << " ";
cout << endl;
return ;
}
}
int main (){
cin >> N;
DFS(1);
return 0;
}
京公网安备 11010502036488号