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

完整代碼
#include<cstdio>
const int maxn = 11;
//P 為當前排列 HashTable記錄整個數(shù)x是否已經(jīng)在P中
int n,P[maxn],hashTable[maxn] = {false};
//當前處理排列的第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;
}
實驗效果

總結(jié)
到此這篇關(guān)于C語言全排列回溯算法介紹的文章就介紹到這了,更多相關(guān)C語言全排列算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C/C++?Qt實現(xiàn)文章小說人物關(guān)系分析
這篇文章主要為大家詳細介紹了C/C++?Qt如何實現(xiàn)文章小說人物關(guān)系分析功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-01-01
C語言詳解如何實現(xiàn)堆及堆的結(jié)構(gòu)與接口
堆是計算機科學中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將詳細介紹堆的結(jié)構(gòu)與接口,需要的可以參考一下2022-04-04
利用簡潔的C語言代碼解決跳臺階問題與約瑟夫環(huán)問題
這篇文章主要介紹了利用簡潔的C語言代碼解決跳臺階問題與約瑟夫環(huán)問題的方法,跳臺階問題與約瑟夫環(huán)問題是常見的基礎(chǔ)算法題目,需要的朋友可以參考下2016-02-02

