C/C++實(shí)現(xiàn)全排列算法的示例代碼
1、全排列的介紹
從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來(lái),叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列。
2、方法和思路
進(jìn)行窮舉法和特殊函數(shù)的方法,窮舉法的基本思想是全部排列出來(lái).特殊函數(shù)法進(jìn)行特殊排列.
3、窮舉法
【不包含重復(fù)數(shù)字的解法】
#include <iostream> using namespace std; int main() { int a[3]; cout << "請(qǐng)輸入一個(gè)三位數(shù):" << endl; for (int m = 0; m < 3; m++) { cin >> a[m]; } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { if (i != j && i != k && j != k) { cout << a[i] << a[j] << a[k] << " "; } } } } }
【包含重復(fù)數(shù)據(jù)的解法】
#include <iostream> using namespace std; int main() { int a[3]; cout << "請(qǐng)輸入一個(gè)三位數(shù):" << endl; for (int m = 0; m < 3; m++) { cin >> a[m]; } for ( int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k = 0; k < 3; k++) { if (i != j && i != k && j != k) { cout << a[i] << a[j] << a[k] << " "; } else if(i==j&&i==k&&j==k) { cout << a[i] << a[j] << a[k] << " "; } } } } }
4、next_permutation()函數(shù)法而且調(diào)用了sort()排序函數(shù)
什么是sort函數(shù)?
這種方法也是小編特別推薦使用的,因?yàn)檫@種方法不僅可以高效的進(jìn)行排序而且特別容易理解.
next_permutation(s1.begin(), s1.end())
解釋:s1.begin(),是字符串的開頭,s1.end()是字符串的結(jié)尾
頭文件:
#include <algorithm>
4.1、升序
#include <iostream> #include <algorithm> #include <string.h> using namespace std; int main() { string s1; cout << "請(qǐng)輸入您要的數(shù)據(jù):" << endl; cin >> s1; do { cout << s1 << " "; } while (next_permutation(s1.begin(), s1.end())); }
4.2、降序
bool cmp(int a, int b) { return a > b; }
while (next_permutation(s1.begin(), s1.end(),cmp));
sort(s1.begin(), s1.end(), cmp);
比升序多了以上三個(gè)數(shù)據(jù)
#include <iostream> #include <algorithm> #include <string.h> using namespace std; bool cmp(int a, int b) { return a > b; } int main() { string s1; cout << "請(qǐng)輸入您要的數(shù)據(jù):" << endl; cin >> s1; sort(s1.begin(), s1.end(), cmp); do { cout << s1 << " "; } while (next_permutation(s1.begin(), s1.end(),cmp)); }
5、總結(jié)
有窮法具有有限性,然而特殊函數(shù)法會(huì)較好的解決了這個(gè)問(wèn)題
到此這篇關(guān)于C/C++實(shí)現(xiàn)全排列算法的示例代碼的文章就介紹到這了,更多相關(guān)C++ 全排列算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++使用cuBLAS加速矩陣乘法運(yùn)算的實(shí)現(xiàn)代碼
這篇文章主要介紹了C++使用cuBLAS加速矩陣乘法運(yùn)算,將cuBLAS庫(kù)的乘法運(yùn)算進(jìn)行了封裝,方便了算法調(diào)用,具體實(shí)現(xiàn)代碼跟隨小編一起看看吧2021-09-09C++實(shí)現(xiàn)分?jǐn)?shù)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)分?jǐn)?shù)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06C語(yǔ)言簡(jiǎn)明講解類型轉(zhuǎn)換的使用與作用
類型轉(zhuǎn)換(type?cast),是高級(jí)語(yǔ)言的一個(gè)基本語(yǔ)法。它被實(shí)現(xiàn)為一個(gè)特殊的運(yùn)算符,以小括號(hào)內(nèi)加上類型名來(lái)表示,接下來(lái)讓我們一起來(lái)詳細(xì)了解2022-04-04C++實(shí)現(xiàn)彩色飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)彩色飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10如何寫好C main函數(shù)的幾個(gè)注意事項(xiàng)
這篇文章主要介紹了如何寫好C main函數(shù)的幾個(gè)注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06C語(yǔ)言實(shí)現(xiàn)520表白代碼 祝你表白成功!
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)520表白代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05