1. 程式人生 > 其它 >c++-全排列(樹實現)

c++-全排列(樹實現)

#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;
    }
}
真好,它們可以飛翔