P1706 全排列问题——回溯、暴力枚举

题目描述

按照字典序输出自然数 1n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入格式

一个整数 n

输出格式

1n 组成的所有不重复的数字序列,每行一个序列。

每个数字保留 5 个场宽。

输入输出样例 #1

输入 #1

3

输出 #1

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

说明/提示

1n9

题解

#include <bits/stdc++.h>
using namespace std;
int n;
vector<vector<int>> solutions;
vector<int> mycurrent;
vector<bool> used;
void func() {
if(mycurrent.size()==n) {
solutions.push_back(mycurrent);
return;
}
for(int i=1;i<=n;i++) {
if(!used[i]) {
mycurrent.push_back(i);
used[i]=true;
func();
used[i]=false;
mycurrent.pop_back();
}
}
}
int main() {
cin>>n;
used.resize(n+1);
func();
for (const auto& solution:solutions) {
for (int num:solution) {
cout<< setw(5) << num;
}
cout<<endl;
}
}
发布于   xiins  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示