#include #include #include #include #include #include #include using namespace std; list f(list::size_type i); list permute(list::size_type i); /* Output a random permutation of the integers 0 to n-1 inclusive. Each pair of numbers falls in the same line. */ const int n = 20 / 2; //number of pairs of chars per line int main() { srand(time(0)); const list li = f(12); copy(li.begin(), li.end(), ostream_iterator(cout, "\n")); return EXIT_SUCCESS; } list f(list::size_type i) //i is number of lines { if (i <= 0) { return list(i); } list li = f(i - 1); const list p = permute(n); for (list::const_iterator it = p.begin(); it != p.end(); ++it){ list::iterator in = li.begin(); list::size_type r = rand() % (li.size() + 1); if (r % 2 != 0) { --r; } advance(in, r); li.insert(in, *it + n * (i - 1)); ++it; li.insert(in, *it + n * (i - 1)); } return li; } list permute(list::size_type i) { if (i <= 1) { return list(i); } list li = permute(i - 1); list::iterator it = li.begin(); advance(it, rand() % i); li.insert(it, i - 1); return li; }