c++-全排列(樹實現)
阿新 • • 發佈:2022-03-05
真好,它們可以飛翔#include <iostream> #include <cstring> using namespace std; int n; int a[1000]; bool b[1000]; int c[10000][10000]; int d[1000]; string s[100000]; void sol(int locate,int y)//y層數 locate父節點位置 { for (int i = 0; i < n; i++) { if (b[i]) { b[i] = false; c[y][d[y]] = a[i]; c[y][d[y] + 1] = locate; d[y] += 2; y++; sol(d[y-1] - 2, y); y--; b[i] = true; } } } int main() { cin >> n; for (int i = 0; i < n; i++) { a[i] = i+1; } memset(d, 0, 1000); memset(b, 1, 1000); sol(0,0); for (int i = 0; i < d[n-1]; i+=2) { int y = n - 1; int w = c[n-1][i+1]; while (y >= 0) { char ca = c[y][w] + '0'; s[i]+=ca; w = c[y][w + 1]; y--; } } for (int i = 0; i < d[n - 1]; i++) { reverse(s[i].begin(), s[i].end()); cout << s[i]; cout << endl; } }