http://www.cplusplus.com/reference/algorithm/next_permutation/?kw=next_permutation
在暴力的时候用这个函数可以使得代码看起来简洁很多。
例如 : LightOJ 1023 - Discovering Permutations
CODE :
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[1005];
void solve(int n, int k) {
for (int i = 0; i < n; i++) a[i] = i;
int cnt = 0;
do {
for (int i = 0; i < n; i++)printf("%c", a[i] + 'A'); printf("\n");
if (++cnt == k)break;
}while (next_permutation(a, a + n));
}
int main() {
int T, n, k; scanf("%d", &T);
for (int cas = 1; cas <= T; cas++) {
scanf("%d%d", &n, &k);
printf("Case %d:\n", cas);
solve(n, k);
}
return 0;
}
很重要的一点就是 不容易写错。
另外相对的还有prev_permutation函数。