大家好,本篇文章主要讲的是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;
}
实验效果
总结
到此这篇关于C语言全排列回溯算法介绍的文章就介绍到这了,更多相关C语言全排列算法内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:C语言全排列回溯算法介绍
基础教程推荐
猜你喜欢
- C++详细实现完整图书管理功能 2023-04-04
- 如何C++使用模板特化功能 2023-03-05
- C语言 structural body结构体详解用法 2022-12-06
- C++中的atoi 函数简介 2023-01-05
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- 详解c# Emit技术 2023-03-25
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C/C++编程中const的使用详解 2023-03-26
- 一文带你了解C++中的字符替换方法 2023-07-20
- C利用语言实现数据结构之队列 2022-11-22