Я хочу найти все возможные комбинации вращения вектора для заданного вектора. Мой код находит определенный элемент последовательно в векторе и затем вращается вокруг него, но эта логика терпит неудачу, когда два одинаковых элемента происходят последовательно, как в {1,1,2} Ниже приведен фрагмент кода, может ли кто-нибудь помочь мне обойти это вопрос, желательно, чтобы разрешить использовать цикл if else внутри цикла for.C++ вектор вращения все комбинации
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
vector<vector<int> > allrot(const vector<int>& a);
int main()
{
int myints[] = { 1, 1, 2 };
std::vector<int> a (myints, myints + sizeof(myints)/sizeof(int));
std::vector<vector<int> > b;
b = allrot(a);
}
vector<vector<int> > allrot(const vector<int>& a) {
std::vector<vector<int> > b;
for(int i = 1; i <= a.size(); i++) {
//int k;
//if (a[i] == a[i+1])
//k = a [i+1];
//else
//k = a[i];
auto pivot = std::find(a.begin(), a.end(), a[i]);
std::vector<int> dest(a.size());
std::rotate_copy(a.begin(), pivot, a.end(), dest.begin());
for (const auto &i : dest) {
std::cout << i << ' ';
}
std::cout << '\n';
b.push_back(dest);
}
return b;
}
Извинения, если вопрос выглядит наивным, я новичок в C++.
Если это не домашняя работа, и вам нужно это для программы, рассмотрите [std :: next_permutation] (http: //en.cppreference.com/w/cpp/algorithm/next_permutation) –
В C++ индекс в массивах (и std :: vector) основан на 0. Apropos 'for (int i = 1; i <= a.size(); i ++) 'и next' auto pivot = std :: find (a.begin(), a.end(), ** a [i] **); ' –
@AdrianColomitchi, я чувствую, что все перестановки и все вращения очень разные. (т. е. существуют 'n' вращения, но' n! 'перестановки). –