7 条题解
-
6
思路
简单的全排列问题,直接DFS可以轻松解决,只需要注意回溯就不会错,dfs下一个节点之后,将vis[i]重新置为flase代码
#include <iostream> #include <cmath> using namespace std; int n, a[15]; bool vis[15]; 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] = true; a[cnt] = i; dfs(cnt + 1); vis[i] = false; } } } int main() { cin >> n; dfs(1); return 0; }
-
3
首先看一下这道题的数据范围,1<=n<=9,非常小,最多只会有9!种排列方式,所以不用太考虑时间复杂度,dfs完全可以胜任
#include <bits/stdc++.h> using namespace std; bool b[15]; int a[15]; int n; void dfs(int x) { if (x == n + 1) { for (int i = 1;i <= n;i++) { cout << a[i] << " "; } cout << endl; return; } for (int i = 1;i <= n;i++) { if (!b[i]) { a[x] = i; b[i] = 1; dfs(x+1); b[i] = 0; } } } int main() { cin >> n; dfs(1); return 0; }//已AC
- 1
信息
- ID
- 330
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 1
- 标签
- (无)
- 递交数
- 478
- 已通过
- 354
- 上传者