C語言全排列回溯算法介紹
前言
本博文源于最近學習的遞歸算法,遞歸中遇到一個問題全排列的問題,我看見回溯特別神奇,特此記錄一下。對比一下深度優(yōu)先搜索與廣度優(yōu)先搜索,個人感覺這里的回溯像是一種遞歸樹中的深度優(yōu)先搜索的算法,他不斷構(gòu)造往下延伸的深度,使其達到完全編列
算法思想
比如3拿來舉例,按照一般正常的話就是應(yīng)該,
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++ 無法從void 轉(zhuǎn)換為LRESULT的方法詳解
本篇文章是對C++中無法從void轉(zhuǎn)換為LRESULT的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題
這篇文章主要介紹了解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01