2016-04-13 8 views
0

Ich habe eine Deque, die eine Reihe von Zahlen enthält {0, 1, 2, 3, 4, 5, 6} und ich versuche, alle möglichen Kombinationen dieser Zahlen durch Rekursion zu erstellen.Erstellen Sie alle möglichen Kombinationen mit einer Deque und Rekursion C++

Hier ist meine aktuellen Code

void combination(vector<node> &comb, deque<node> &numbers) { 

    if (numbers.empty()) { 
     for (unsigned int i = 0; i < comb.size(); i++) { 
      cout << comb[i].id << " "; 
     } 
     cout << "\n"; 
     return; 
    } 

    comb.push_back(numbers.front()); 
    numbers.pop_front(); 
    combination(comb, numbers); 
    comb.pop_back(); 
    combination(comb, numbers); 
} 

ich dies durch auf Papier lief habe und es macht Sinn, aber wenn ich es das ist der Ausgang laufen:

0 1 2 3 4 5 6 
0 1 2 3 4 5 
0 1 2 3 4 
0 1 2 3 
0 1 2 
0 1 
0 

Warum ist nicht die Funktion alle möglichen Kombinationen ausdrucken?

Auch das möchte ich verwenden - Ein Deque, der die Zahlen und einen Vektor enthält, der jede Kombination enthält.

+0

Ich nehme an, dies für eine Schule ist Übung oder andere Lernerfahrung? Andernfalls sollten Sie stattdessen ['std :: next_permutation'] (http://en.cppreference.com/w/cpp/algorithm/next_permutation) verwenden. –

+0

Ich verwende dies, um eine Branch and Bound-Methode für ein Problem zu implementieren. Also, ich kann 'next_permutation' nicht verwenden –

+0

Auch der Code, wie Sie hier gepostet haben, würde nicht kompilieren. Ich nehme an, die Funktion sollte "permute" anstelle von "combination" genannt werden und "combination.push_back (...)" sollte "comb.push_back (...)" lauten. – CantrianBear

Antwort

2

Sie verwenden Pass Bezug genommen wird, habe ich einige kleinere Änderungen vorgenommen und es funktioniert

Code:

#include <bits/stdc++.h> 
using namespace std; 

void combination(vector<int> comb, deque<int> numbers) { 

    if (numbers.empty()) { 
     for (unsigned int i = 0; i < comb.size(); i++) { 
      cout << comb[i] << " "; 
     } 
     cout << "\n"; 
     return; 
    } 

    comb.push_back(numbers.front()); 
    numbers.pop_front(); 
    combination(comb, numbers); 
    comb.pop_back(); 
    combination(comb, numbers); 
} 

int main() { 
    // your code goes here 
    vector<int> comb; 
    deque<int> numbers; 
    for(int i = 0;i < 7;i++) numbers.push_back(i); 
    combination(comb, numbers); 
    return 0; 
} 

Link zur Lösung auf ideone: http://ideone.com/vgukF3

+0

Jemand anderes hat meinen Beitrag kommentiert, dass nur die Deque Wert sein muss, aber das ist auch eine gute Antwort. –

Verwandte Themen