C語(yǔ)言全排列回溯算法介紹
前言
本博文源于最近學(xué)習(xí)的遞歸算法,遞歸中遇到一個(gè)問題全排列的問題,我看見回溯特別神奇,特此記錄一下。對(duì)比一下深度優(yōu)先搜索與廣度優(yōu)先搜索,個(gè)人感覺這里的回溯像是一種遞歸樹中的深度優(yōu)先搜索的算法,他不斷構(gòu)造往下延伸的深度,使其達(dá)到完全編列
算法思想
比如3拿來舉例,按照一般正常的話就是應(yīng)該,
123 132 213 231 312 321
六種,先造出一個(gè)hashtable數(shù)組讓其存儲(chǔ)在各位是否使用,然后創(chuàng)建path的p數(shù)組將數(shù)字進(jìn)行選填,遞歸樹我花在文章下面。

完整代碼
#include<cstdio>
const int maxn = 11;
//P 為當(dāng)前排列 HashTable記錄整個(gè)數(shù)x是否已經(jīng)在P中
int n,P[maxn],hashTable[maxn] = {false};
//當(dāng)前處理排列的第index位置
void generateP(int index) {
if(index == n+1){
for(int i=1;i<=n;i++){
printf("%d",P[i]);
}
printf("\n");
return ;
}
for(int x = 1;x<=n;x++) {
if(hashTable[x] == false) {
P[index] = x;
hashTable[x] = true;
generateP(index + 1);
hashTable[x] = false;
}
}
}
int main()
{
n = 3;
generateP(1);
return 0;
}
實(shí)驗(yàn)效果

總結(jié)
到此這篇關(guān)于C語(yǔ)言全排列回溯算法介紹的文章就介紹到這了,更多相關(guān)C語(yǔ)言全排列算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)list增刪查改模擬的示例代碼
本文主要介紹了C++實(shí)現(xiàn)list增刪查改模擬,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12
解決C++ 無(wú)法從void 轉(zhuǎn)換為L(zhǎng)RESULT的方法詳解
本篇文章是對(duì)C++中無(wú)法從void轉(zhuǎn)換為L(zhǎng)RESULT的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
解決Microsoft?Visual?C++?2010?Express?運(yùn)行及調(diào)試問題
這篇文章主要介紹了解決Microsoft?Visual?C++?2010?Express?運(yùn)行及調(diào)試問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
C語(yǔ)言實(shí)現(xiàn)讀取CSV文件的方法詳解
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何實(shí)現(xiàn)讀取CSV文件,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12

