fork download
  1. #include <vector>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <iterator>
  5. #include <algorithm>
  6.  
  7. using namespace std;
  8.  
  9. vector<vector<int>> src =
  10. {
  11. { 0, 1, -1, 0},
  12. {-1, 0, -1, 1},
  13. { 0, 0, 0, 0},
  14. { 1, 1, 1, 0}
  15. };
  16.  
  17. vector<vector<int>> dest;
  18.  
  19. void make_tuples(vector<int> s, back_insert_iterator<vector<vector<int>>> d)
  20. {
  21. auto i = find(s.begin(),s.end(),-1);
  22. if (i == s.end())
  23. {
  24. d = s;
  25. return;
  26. }
  27. *i = 0;
  28. make_tuples(s,d);
  29. *i = 1;
  30. make_tuples(s,d);
  31. }
  32.  
  33. int main(int argc, const char * argv[])
  34. {
  35. for(int i = 0; i < src.size(); ++i)
  36. {
  37. if (any_of(src[i].begin(),src[i].end(),[](int j){ return j == -1; }))
  38. {
  39. make_tuples(src[i],back_inserter(dest));
  40. }
  41. else
  42. dest.push_back(src[i]);
  43. }
  44.  
  45. for(auto row : dest)
  46. {
  47. for(auto i: row) cout << i << " ";
  48. cout << endl;
  49. }
  50.  
  51. }
  52.  
  53.  
  54.  
Success #stdin #stdout 0s 15248KB
stdin
Standard input is empty
stdout
0  1  0  0  
0  1  1  0  
0  0  0  1  
0  0  1  1  
1  0  0  1  
1  0  1  1  
0  0  0  0  
1  1  1  0