解题代码—next_permutation
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
using namespace std;
int Cmp(const void* a, const void* b);
int main()
{
int n;
cin >> n;
int* a = (int*)malloc(n * sizeof(int));
int i;
for (i = 0; i < n; i++) a[i] = i + 1;
qsort(a, n, sizeof(int), Cmp);
do {
for (i = 0; i < n; i++) cout << a[i];
cout << endl;
} while (next_permutation(a,a+n));
return 0;
}
int Cmp(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}
测试结果—next_permutation
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f777fa5e155d231aec8c70aed7dcc186.png)
解题代码—dfs
#include<stdio.h>
int a[10], b[10], n;
void dfs(int flag) {
if (flag == n + 1) {
for (int i = 1; i <= n; i++)
printf("%d", a[i]);
printf("\n");
}
else {
for (int i = 1; i <= n; i++) {
if (!b[i]) {
a[flag] = i;
b[i] = 1;
dfs(flag + 1);
b[i] = 0;
}
}
}
}
int main()
{
scanf("%d", &n);
dfs(1);
return 0;
}
测试结果—dfs
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a04edd108ba669e19ef3fa1544988fcd.png)
问题整理
1.第一种方法用的是C++的algorithm的next_permutation函数,偷鸡成功。
2.第二种方法用的是dfs深度搜索,观察发现运算时间大概是方法一的一半左右。