窮舉所有排列
阿新 • • 發佈:2018-12-11
時限:100ms 記憶體限制:10000K 總時限:300ms
描述
輸入一個小於10的正整數n,按把每個元素都交換到最前面一次的方法,輸出前n個小寫字母的所有排列。
輸入
輸入一個小於10的正整數n。
輸出
按把每個元素都交換到最前面一次的方法,輸出前n個小寫字母的所有排列。
輸入樣例
3
輸出樣例
abc
acb
bac
bca
cba
cab
#include <iostream> #include <stdio.h> using namespace std; int n; char a[10] = {'a','b','c','d','e','f','g','h','i','j'}; void swap(int x,int y) { int tmp; tmp = a[x]; a[x] = a[y]; a[y] = tmp; } void search(int k) { int i; if(k == n) { for(i = 0;i < n;i++) { cout << a[i]; } cout << endl; } else { for(i = k;i < n;i++) { swap(i,k); search(k+1); swap(i,k); } } } int main() { cin >> n; search(0); return 0; }
也是非常典型的回溯演算法