C语言全排列回溯算法介绍

目录

  • 前言
  • 算法思想
  • 完整代码
  • 实验效果
  • 总结

前言 本博文源于最近学习的递归算法,递归中遇到一个问题全排列的问题,我看见回溯特别神奇,特此记录一下。对比一下深度优先搜索与广度优先搜索,个人感觉这里的回溯像是一种递归树中的深度优先搜索的算法,他不断构造往下延伸的深度,使其达到完全编列

算法思想 比如3拿来举例,按照一般正常的话就是应该,
123 132 213 231 312 321
六种,先造出一个hashtable数组让其存储在各位是否使用,然后创建path的p数组将数字进行选填,递归树我花在文章下面。
C语言全排列回溯算法介绍
文章图片


完整代码
#includeconst 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; }


实验效果 C语言全排列回溯算法介绍
文章图片


总结 【C语言全排列回溯算法介绍】到此这篇关于C语言全排列回溯算法介绍的文章就介绍到这了,更多相关C语言全排列算法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读