全ての順列を生成するプログラムとしてはこれが最適ではないかな。たった4行。

#include<stdio.h>
#include<vector>
using namespace std;
typedef vector<unsigned char> ret;

void shuffle(ret A, ret &B, int k){
int i,n,N=k,M=A.size(); B.resize(M);
for(i=M;i>=1;i--) {
n=N % i; N/=i; B[M-i]=A[n];
memmove(&A[n], &A[n+1], i-n-1); }}

main(){
ret A(5),B;
for(int i=0; i<5; i++)A[i]=i+1;
for(int k=0; k<120; k++){
shuffle(A,B,k);
for(int i=0; i<5; i++) printf("%d ",B[i]);printf("\n"); }}