PKU 1256 Anagram

  • 比較関数を変えてnext_permutation()を呼び出す
  • 比較関数を関数オブジェクト等にすればもっと綺麗だった
int main() {
	int letterToIndex[0x100];
	char indexToLetter[0x100];
	for (char c = 'A'; c <= 'Z'; ++c) {
		letterToIndex[c] = (c - 'A') * 2;
		indexToLetter[(c - 'A') * 2] = c;
	}
	for (char c = 'a'; c <= 'z'; ++c) {
		letterToIndex[c] = (c - 'a') * 2 + 1;
		indexToLetter[(c - 'a') * 2 + 1] = c;
	}

	int N;
	cin >> N;
	for (int n = 0; n < N; ++n) {
		string s;
		cin >> s;
		vector<int> v;
		for (string::iterator it = s.begin(); it != s.end(); ++it) {
			v.push_back(letterToIndex[*it]);
		}
		sort(v.begin(), v.end());

		do {
			for (vector<int>::iterator it = v.begin(), itEnd = v.end(); it != itEnd; ++it) {
				cout << indexToLetter[*it];
			}
			cout << endl;
		} while (next_permutation(v.begin(), v.end()));
	}
}