(原)给定输入,输出全排列
生活随笔
收集整理的這篇文章主要介紹了
(原)给定输入,输出全排列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以前的時候的面試題,然后被鄙視了。
題目就是給定一系列數字,輸出這些數字的全排列(不一定是數字)。下面的代碼只當數字來處理。
1 // 計算全排列的遞歸調用函數 2 vector<vector<int> > FullPermutation(vector<int> &vectin, int arrayinnum) 3 { 4 5 if (arrayinnum == 1) 6 { 7 vector<vector<int> > arrayout(1); 8 arrayout[0].resize(1); 9 arrayout[0].at(0) = vectin.at(0); 10 vectin.erase(vectin.begin()); 11 return arrayout; 12 } 13 else 14 { 15 vector<vector<int> > vecttemp = FullPermutation(vectin, arrayinnum - 1); 16 vector<vector<int> > vectout(arrayinnum * vecttemp.size()); 17 18 int i = 0; 19 for (vector <vector <int> >::iterator iter = vecttemp.begin(); iter < vecttemp.end(); iter++) 20 { 21 for (int j = 0; j < arrayinnum; j++) 22 { 23 vectout[i] = *iter; 24 vectout[i].insert(vectout[i].begin() + j, vectin.front()); 25 i++; 26 } 27 } 28 29 vectin.erase(vectin.begin()); 30 vecttemp.clear(); 31 return vectout; 32 } 33 } 34 35 // 得到全排列的函數 36 vector<vector<int> > getFullPermutation(int* datain, int datanum) 37 { 38 vector<int> vectin(datanum); 39 for (int i = 0; i < datanum; i++) 40 { 41 vectin.at(i) = datain[i]; 42 } 43 44 vector<vector<int> > vectout = FullPermutation(vectin, datanum); 45 46 vectin.clear(); 47 48 return vectout; 49 }下面是測試函數:
1 int _tmain(int argc, _TCHAR* argv[]) 2 { 3 const int num = 4; 4 int arrayin[num] = {1, 2,3,4}; 5 6 vector<vector<int> > perRes = getFullPermutation(arrayin, num); 7 8 for (vector <vector <int> >::iterator iter = perRes.begin(); iter < perRes.end(); iter++) 9 { 10 for (vector <int>::iterator it = (*iter).begin(); it < (*iter).end(); it++) 11 { 12 cout << *it << " "; 13 } 14 cout << endl; 15 } 16 17 perRes.clear(); 18 19 return 0; 20 }上面測試函數的結果:
1 4 3 2 1 2 3 4 2 1 3 3 2 4 1 4 3 2 1 4 5 4 2 3 1 6 2 4 3 1 7 2 3 4 1 8 2 3 1 4 9 4 2 1 3 10 2 4 1 3 11 2 1 4 3 12 2 1 3 4 13 4 3 1 2 14 3 4 1 2 15 3 1 4 2 16 3 1 2 4 17 4 1 3 2 18 1 4 3 2 19 1 3 4 2 20 1 3 2 4 21 4 1 2 3 22 1 4 2 3 23 1 2 4 3 24 1 2 3 4測試函數改成如下:
1 const int num = 3; 2 int arrayin[num] = {1, 2,3}; 3 4 vector<vector<int> > perRes = getFullPermutation(arrayin, num); 5 6 for (vector <vector <int> >::iterator iter = perRes.begin(); iter < perRes.end(); iter++) 7 { 8 for (vector <int>::iterator it = (*iter).begin(); it < (*iter).end(); it++) 9 { 10 cout << *it << " "; 11 } 12 cout << endl; 13 } 14 15 perRes.clear();運行結果如下:
1 3 2 1 2 2 3 1 3 2 1 3 4 3 1 2 5 1 3 2 6 1 2 3說明:
1 不太會使用vector,當做是練手。
2 此程序沒有處理有重復的數字的情況。
3 如果改成其他類型,也可以,只需要把vector<int>改成其他對應類型就行了。沒怎么使用過模板,因而此處就不使用了。
?
轉載于:https://www.cnblogs.com/darkknightzh/p/4378444.html
總結
以上是生活随笔為你收集整理的(原)给定输入,输出全排列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Intellij IDEA 14.0
- 下一篇: 模拟 Codeforces Round