/* * * Copyright (c) 1994 * Hewlett-Packard Company * */ #ifndef GENERATE_PERMUTATION_H #define GENERATE_PERMUTATION_H #include "utilities.H" template int nextPermutation(Iterator first, Iterator last) { if (last - first < 2) return 0; Iterator i = last - 2; while (1) { if (*i < *(i + 1)) { Iterator j = last - 1; while (*i >= *j) j--; swap(*i, *j); reverse(i + 1, last); return 1; } if (i == first) { reverse(first, last); return 0; } i--; } } #endif