Several methods full array

 

1, the configuration of backtracking + (output lexicographic order)

void Print () {
     int I;
     for (I = . 1 ; I <= n-; I ++ ) 
        COUT << consist [I] << '  ' ; 
    COUT << endl; 
} 
void DFS ( int K) { // deep search function, the current frame is the k 
    int I;
     IF (n-k ==) { // filled when 
        Print (); // output current solution 
        return ; 
    } 
    for (I = . 1 ; I <= n-; I ++) { // . 1-n-fill cycle number 
        IF (! Fuck [I]) { //If the current number is not used 
            fuck [i] = . 1 ; // tag click 
            consist [K + . 1 ] = I; // this number populated array 
            DFS (K + . 1 ); // Fill the next 
            fuck [i] = 0 ; // back 
        } 
    } 
}

2, deep search (output lexicographic order)

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int N;
vector<int> arr;

void dfs(vector<int>ans, int k) {
    if (k == N) {
        for (int i = 0; i < N; i++) {
            cout << ans[i] << ' ';
        }
        cout << endl;
        return;
    }

    for (int i = k; i < N; i++) {
        swap(ans[i], ans[k]);
        dfs(ans, k + 1);
    }
}

int main() {
    cin >> N;
    for (int i = 0; i < N; i++) {
        arr.push_back(i + 1);
    }

    dfs(arr, 0);
    return 0;
}

 

3, or deep search ( non-dictionary order )

This output out of order is not a dictionary, is a very strange order.

#include <iostream>
#include <fstream>
using namespace std;

int arr[10];
void process(int k,int n) {
    if (k == n) {
        for (int i = 1; i <= n; i++) {
            cout << arr[i] << ' ';
        }
        cout << endl;
        return;
    }
    for (int i = k; i <= n; i++) {
        swap(arr[i], arr[k]);
        process(k + 1, n);
        swap(arr[i], arr[k]);
    }
}
int main() {
    fstream fin("data.in");
    int n;
    fin >> n;
    for (int i = 1; i <= n; i++) {
        arr[i] = i;
    }
    process(1,n);
}

4, C ++ algoritgm next_permutation (output lexicographic order)

#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
int arr[10];
int main() {
    fstream fin("data.in");
    int n;
    fin >> n;
    for (int i = 1; i <= n; i++) {
        arr[i] = i;
    }
    while (next_permutation(arr + 1, arr + n + 1)) {
        for (int i = 1; i <= n; i++) {
            cout << arr[i] << ' ';
        }
        cout << endl;
    }
}

 

Guess you like

Origin www.cnblogs.com/caozicheng1999/p/11519968.html