最近在刷深宽搜/DP问题,顺带把以前没搞懂的题(全排列等)轻松AC了,总结一个快速全排列的方法
这个方法主要用到STL的string,30ms,内存3774kb
思路:每一次遍历设vis,一旦可以直接钻进去(顺便加上string)
AC代码:
#include <iostream> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) int16_t n; string nowV; bool vis[10]; void dfs(int step) { if (step > n) { cout << nowV << '\n'; return; } rep(i, 1, n + 1) { if (!vis[i]) { nowV.push_back(i +'0'); vis[i] = true; dfs(step + 1); vis[i] = false; nowV.pop_back(); } } } int main() { ios::sync_with_stdio(false); cout.tie(nullptr); cin >> n; dfs(1); }
其实我没有离线!有事请留言,一般在两三小时内回复!