C语言全排列回溯算法介绍
时间:2022-02-19 09:39:55|栏目:C代码|点击: 次
前言
本博文源于最近学习的递归算法,递归中遇到一个问题全排列的问题,我看见回溯特别神奇,特此记录一下。对比一下深度优先搜索与广度优先搜索,个人感觉这里的回溯像是一种递归树中的深度优先搜索的算法,他不断构造往下延伸的深度,使其达到完全编列
算法思想
比如3拿来举例,按照一般正常的话就是应该,
123 132 213 231 312 321
六种,先造出一个hashtable数组让其存储在各位是否使用,然后创建path的p数组将数字进行选填,递归树我花在文章下面。
完整代码
#include<cstdio> const int maxn = 11; //P 为当前排列 HashTable记录整个数x是否已经在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; }