5 条题解
-
2
#include<bits/stdc++.h> using namespace std; int n,a[10]; bool vis[10]; void dfs(int cnt){ if(cnt==n+1){ for(int i=1;i<=n;i++)cout<<a[i]<<" "; cout<<endl; return; } for(int i=1;i<=n;i++) if(!vis[i]){ vis[i]=1; a[cnt]=i; dfs(cnt+1); vis[i]=0; } } int main(){ cin>>n; dfs(1); return 0; }
-
1
提示:本题解作者只是为了练习语法,思路讲的可能很多
#include <bits/stdc++.h> using std::cin; using std::cout; using std::endl; using std::next_permutation; using ll = long long; int n; namespace sub1 // 如果小于5,我们可以用dfs解 { int a[10]; bool vis[10]; void dfs(int u) { if (u > n) { for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl; return ; } for (int i = 1; i <= n; i++) { if (!vis[i]) { vis[i] = 1; a[u] = i; dfs(u + 1); vis[i] = 0; } } } void main() { dfs(1); } } namespace sub2 // 剩下的情况都用next_permutation解 { int a[15]; void main() { for (int i = 1; i <= n; i++) a[i] = i; do { for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl; }while (next_permutation(a + 1, a + n + 1)); } } int main() { cin >> n; if (n <= 5) sub1::main(); else sub2::main(); return 0; }
-
0
这道题难度还阔以 你们知道吗在#include <algorithm>里有一个函数,全排列函数:
next_permutation!
要循环n的阶乘次! 上代码:
using namespace std; int a[10]; int main() { int n,i,j=1,k; cin>>n; for(i=1;i<=n;i++) { a[i]=n-i+1;j*=i; }//题目好像没说要从小到大输出 //但保险起见还是初始赋值为最大序列 //即a[1~n]=n~1;顺便计算n! for(i=1;i<=j;i++) { next_permutation(a+1,a+n+1); for(k=1;k<=n;k++) cout<<" "<<a[k];//排一次输出一次 cout<<endl; } return 0; }
其实我知道这个是在##[洛谷]编程的题解里知道的 网址:https://www.luogu.com.cn/problem/solution/P1706
- 1
信息
- ID
- 305
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 2
- 标签
- 递交数
- 58
- 已通过
- 37
- 上传者