#include #include #include #include #include #include #include #include #include using namespace std; class TheBrickTowerMediumDivTwo { public: vector find(vector heights); vector H; vector I; void Permute(int index); }; void TheBrickTowerMediumDivTwo::Permute(int index) { int i, tmp; if (index == I.size()) { for (i = 0; i < index; i++) cout << I[i] << " "; cout << endl; return; } /* This is the standard recursive permutation -- swap each element in I with the one in index, and call recursively on index+1 */ for (i = index; i < I.size(); i++) { tmp = I[i]; I[i] = I[index]; I[index] = tmp; Permute(index+1); tmp = I[i]; I[i] = I[index]; I[index] = tmp; } } vector TheBrickTowerMediumDivTwo::find(vector heights) { vector rv; int i; H = heights; for (i = 0; i < H.size(); i++) I.push_back(i); Permute(0); return rv; }