next_permutation

STLに面白い関数が入ってた。

#include <algorithm>
#include <fstream>
#include <sstream>
#include <iostream>
#include <vector>

using namespace std;

template<class IIter>
string put(IIter begin, IIter end){
	stringstream temp;
	temp << end-begin << ":[" << flush;
	while(begin != end){
		temp << *(begin++) << " " << flush;
	}
	temp << "]" << flush;
	return temp.str();
}

int main(){
	vector<int> v;
	for(int i=1; i <= 5; i++){
		v.push_back(i);
	}
	int cnt = 1;
	ofstream out("result.txt");
	out << put(v.begin(), v.end()) << endl;
	while(next_permutation(v.begin(), v.end())){
		out << put(v.begin(), v.end()) << endl;
		cnt++;
	}
	out << cnt << endl;
	out.close();
	return 0;
}

で、result.txtが

5:[1 2 3 4 5 ]
5:[1 2 3 5 4 ]
5:[1 2 4 3 5 ]
5:[1 2 4 5 3 ]
5:[1 2 5 3 4 ]
5:[1 2 5 4 3 ]
5:[1 3 2 4 5 ]
5:[1 3 2 5 4 ]
5:[1 3 4 2 5 ]
5:[1 3 4 5 2 ]
5:[1 3 5 2 4 ]
5:[1 3 5 4 2 ]
5:[1 4 2 3 5 ]
5:[1 4 2 5 3 ]
5:[1 4 3 2 5 ]
5:[1 4 3 5 2 ]
5:[1 4 5 2 3 ]
5:[1 4 5 3 2 ]
5:[1 5 2 3 4 ]
5:[1 5 2 4 3 ]
5:[1 5 3 2 4 ]
5:[1 5 3 4 2 ]
5:[1 5 4 2 3 ]
5:[1 5 4 3 2 ]
5:[2 1 3 4 5 ]
5:[2 1 3 5 4 ]
5:[2 1 4 3 5 ]
5:[2 1 4 5 3 ]
5:[2 1 5 3 4 ]
5:[2 1 5 4 3 ]
5:[2 3 1 4 5 ]
5:[2 3 1 5 4 ]
5:[2 3 4 1 5 ]
5:[2 3 4 5 1 ]
5:[2 3 5 1 4 ]
5:[2 3 5 4 1 ]
5:[2 4 1 3 5 ]
5:[2 4 1 5 3 ]
5:[2 4 3 1 5 ]
5:[2 4 3 5 1 ]
5:[2 4 5 1 3 ]
5:[2 4 5 3 1 ]
5:[2 5 1 3 4 ]
5:[2 5 1 4 3 ]
5:[2 5 3 1 4 ]
5:[2 5 3 4 1 ]
5:[2 5 4 1 3 ]
5:[2 5 4 3 1 ]
5:[3 1 2 4 5 ]
5:[3 1 2 5 4 ]
5:[3 1 4 2 5 ]
5:[3 1 4 5 2 ]
5:[3 1 5 2 4 ]
5:[3 1 5 4 2 ]
5:[3 2 1 4 5 ]
5:[3 2 1 5 4 ]
5:[3 2 4 1 5 ]
5:[3 2 4 5 1 ]
5:[3 2 5 1 4 ]
5:[3 2 5 4 1 ]
5:[3 4 1 2 5 ]
5:[3 4 1 5 2 ]
5:[3 4 2 1 5 ]
5:[3 4 2 5 1 ]
5:[3 4 5 1 2 ]
5:[3 4 5 2 1 ]
5:[3 5 1 2 4 ]
5:[3 5 1 4 2 ]
5:[3 5 2 1 4 ]
5:[3 5 2 4 1 ]
5:[3 5 4 1 2 ]
5:[3 5 4 2 1 ]
5:[4 1 2 3 5 ]
5:[4 1 2 5 3 ]
5:[4 1 3 2 5 ]
5:[4 1 3 5 2 ]
5:[4 1 5 2 3 ]
5:[4 1 5 3 2 ]
5:[4 2 1 3 5 ]
5:[4 2 1 5 3 ]
5:[4 2 3 1 5 ]
5:[4 2 3 5 1 ]
5:[4 2 5 1 3 ]
5:[4 2 5 3 1 ]
5:[4 3 1 2 5 ]
5:[4 3 1 5 2 ]
5:[4 3 2 1 5 ]
5:[4 3 2 5 1 ]
5:[4 3 5 1 2 ]
5:[4 3 5 2 1 ]
5:[4 5 1 2 3 ]
5:[4 5 1 3 2 ]
5:[4 5 2 1 3 ]
5:[4 5 2 3 1 ]
5:[4 5 3 1 2 ]
5:[4 5 3 2 1 ]
5:[5 1 2 3 4 ]
5:[5 1 2 4 3 ]
5:[5 1 3 2 4 ]
5:[5 1 3 4 2 ]
5:[5 1 4 2 3 ]
5:[5 1 4 3 2 ]
5:[5 2 1 3 4 ]
5:[5 2 1 4 3 ]
5:[5 2 3 1 4 ]
5:[5 2 3 4 1 ]
5:[5 2 4 1 3 ]
5:[5 2 4 3 1 ]
5:[5 3 1 2 4 ]
5:[5 3 1 4 2 ]
5:[5 3 2 1 4 ]
5:[5 3 2 4 1 ]
5:[5 3 4 1 2 ]
5:[5 3 4 2 1 ]
5:[5 4 1 2 3 ]
5:[5 4 1 3 2 ]
5:[5 4 2 1 3 ]
5:[5 4 2 3 1 ]
5:[5 4 3 1 2 ]
5:[5 4 3 2 1 ]
120

激しい誰得。アルゴリズム系の大会だったら使える場面がある…かな?