2016-04-13 17 views
0

Bir dizi {0, 1, 2, 3, 4, 5, 6} içeren bir deque'im var ve yinelemeyi kullanarak bu sayıların tüm olası kombinasyonlarını oluşturmaya çalışıyorum. İşte Bir deque ve yineleme kullanarak tüm olası kombinasyonları yaratın C++

kağıt üzerinde bu akıp giden ettik

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); 
} 

benim şimdiki kodudur ve mantıklı ama çalıştırdığınızda bu çıktısı şöyledir:

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 

Neden değil tüm olası kombinasyonları yazdırma işlevi var mı?

Ayrıca, kullanmak istediğim de bu - Sayıları içeren bir deque ve her birleşimi içeren bir vektör. Sen referans olarak Geçidi kullanan

+0

Bunun bir okul için olduğunu varsayalım egzersiz ya da diğer öğrenme deneyimi? Aksi takdirde, bunun yerine ['std :: next_permutation'] (http://en.cppreference.com/w/cpp/algorithm/next_permutation) kullanmalısınız. –

+0

Bir sorun için Dal ve Sınır yöntemini uygulamak için bunu kullanıyorum. Yani 'next_permutation' kullanamazsınız –

+0

Ayrıca, burada gönderdiğiniz kod derleme yapmaz. "Kombinasyon" yerine "permute" ve "combin.push_back (...)" işlevlerinin "comb.push_back (...)" olması gerektiğini varsayalım mı? – CantrianBear

cevap

2

i bazı küçük değişiklikler yaptık ve işe yarıyor

kodu: ideone üzerine çözümüne

#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; 
} 

Bağlantı: http://ideone.com/vgukF3

+0

Başkası, başka bir deyişle, sadece deque değerinin değere göre geçmesi gerektiğine dair yorum yaptı, ancak bu aynı zamanda iyi bir cevap. –

İlgili konular