AcWing 823. 真的很简单了,可以看一下
原题链接
困难
作者:
Sukai
,
2021-02-28 15:23:17
,
所有人可见
,
阅读 1279
答案
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e6; //状态数组的大小
vector<int> res; // 暂存结果(就是其中某一个结果,因为我们要输出所有的结果嘛)
int n;//输入个数
vector<vector<int>> ans;//结果集合
bool state[N];//标记每一个数字是否被用过(0->未使用 1->使用过)
int dfs(vector<int> vect) {
//当出现一个结果之后就将结果保存到结果集中
if (res.size() == n) {
ans.push_back(res);
return 0;
}
for (int i = 0; i < vect.size(); i++) {
//如果当前的数字已经被使用过则跳过
if (state[i] == true) continue;
//将当前数字放入结果
res.push_back(vect[i]);
//标记当前数字已经被使用过
state[i] = 1;
//进行下一次(你可以想成下一次同样也是从这三种拿一个)
dfs(vect);
//当dfs结果之后需要把当前的数字释放掉
state[i] = 0; //状态标记为为使用,也就是0
res.pop_back();//在结果中删除这个数(1 2 3 => 1 2)
}
}
/*
* 输出结果集
*/
void printRes(vector<vector<int>> v){
for(auto item : v){
for(auto it : item){
cout << it << ' ';
}
cout << endl;
}
}
int main() {
cin >> n;
vector<int> vect;
for (int i = 1; i <= n; ++i) {
vect.push_back(i);
}
dfs(vect);
printRes(ans);
return 0;
}
我在CB上跑了一下没输出啊
这道题不值得困难这级别
适合新手做吗?礼貌问
24年是简单了hhh