2016-02-09 3 views
-1

Я пытаюсь создать программу, которая будет распечатывать все возможные подмножества множества, а также каждую возможную позицию для каждого подмножества. Чтобы уточнить: если я установил {1,2} подмножества {{}, {1}, {2}, {1,2}}, , но я также хочу напечатать {2,1} Итак, все возможный вариант каждого подмножества, если он состоит из более чем одного элемента.Как создать программу, которая печатает все подмножества множества и все возможные позиционирования для каждого подмножества?

code: 
[link][1] 
This prints out all possible subsets(except blank one), I can't tweak it so is does what I want. 
I know there is much better way with recursion, but I'm not familiar with it, so please if it's possible to do it that way do it for me. 
thanks for listening. 
P.S. I don't want elements of subsets to be separated from each other (i want it to be as in code). 


    [1]: http://i.stack.imgur.com/TPcwg.png 
+0

Не размещайте изображения или ссылки на изображения. Скопируйте код, с которым вы столкнулись, и разместите его здесь. Также читайте: http://stackoverflow.com/help/how-to-ask – user2079303

+0

Я не мог ввести свой код, поскольку он писал ваш код, не имеет правильного выравнивания или что-то вроде этого так извините – Ika

+0

[link] (https://www.quora.com/How-do-I-create-program-that-prints-all-subsets-of-set-and-all-possible-positioning-for-each-subset?__snids__=1554852494&__nsrc__=2) такой же вопрос здесь – Ika

ответ

1

Вот что-то, чтобы получить вам представление о том, как это сделать (вы должны написать свой код на свой собственный, тем более, что я не пишу C++). Лучший способ сделать это рекурсия:

getSubcombinations(Combination comb, Set set){ 
    for a in set{ 
     newSet=set \ {a} 
     getSubcombinations(comb+a, newSet) 
    } 
    print(comb); 
} 

метод вызывает себя, увеличивая текущее подмножество с элементом «а» и каждая комбинация restset (множества без), а также выдает текущее подмножество, если вы не добавляете дополнительных элементов. Если у вашего набора нет дубликатов (это набор!), Это не даст дубликатов комбинаций (это то, о чем вы просите, а не подмножества!).

+0

спасибо за ответ, но я не понял, что такое второй набор, который необходим для функции и что такое «а»? – Ika

+0

'a' - это элемент набора, который вы даете методу. Первый параметр - это текущая комбинация, второй параметр - это набор элементов, не входящих в комбинацию (которые по-прежнему доступны для выбора). – ctst

0
#include <iostream> 
#include <vector> 
#include <algorithm> 

void subsets(int n, int r) 
    { 
    std::vector<bool> v(n); 
    std::fill(v.begin(), v.begin() + r, true); 

    do { 
     std::vector<int> p; 
     for (int i = 0; i < n; ++i) 
      if (v[i]) 
       p.push_back(i); 
     do { 
      std::cout << " { "; 
      for(auto i : p) 
       std::cout << i << ' '; 
      std::cout << "} "; 
      } while(std::next_permutation(p.begin(), p.end())); 
     } while (std::prev_permutation(v.begin(), v.end())); 
    } 

void subsets(int n) 
    { 
    for(int r=0; r<=n; ++r) 
     subsets(n, r); 
    } 

int main() 
    { 
    subsets(4); 
    } 
Смежные вопросы