* 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先

* 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中

* 产生一个正确的解,然后在以后的每一步搜索过程中,都检查其前一步

* 的记录,并且它将有条件的选择以后的每一个搜索状态(即第i+1层的

* 状态节点)。

/*

* 回溯法 实现 排列组合

*

* 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先

* 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中

* 产生一个正确的解,然后在以后的每一步搜索过程中,都检查其前一步

* 的记录,并且它将有条件的选择以后的每一个搜索状态(即第i+1层的

* 状态节点)。

*

* 需掌握的基本算法:

* 排列:就是从n个元素中同时取r个元素的排列,记做P(n,r)。(当r=n时,

* 我们称P(n,n)=n!为全排列) 例如我们有集合OR = {1,2,3,4},那么

* n = |OR| = 4, 且规定r=3, 那么P(4,3)就是:

*

* {1,2,3}; {1,2,4}; {1,3,2}; {1,3,4}; {1,4,2}; {1,4,3};

* {2,1,3}; {2,1,4}; {2,3,1}; {2,3,4}; {2,4,1}; {2,4,3};

* {3,1,2}; {3,1,4}; {3,2,1}; {3,2,4}; {3,4,1}; {3,4,2};

* {4,1,2}; {4,1,3}; {4,2,1}; {4,2,3}; {4,3,1}; {4,3,2}

*

*/

#include

#ifndef MAXN

#define MAXN 5

#endif

static int n = 3, r = 3; /* P(n,r) */

static char used[MAXN]; /* 待排列数据使用标记 */

static char p[MAXN]; /* 解空间 - 保存每次形成的排列结果 */

static char data[] = {'a','b','c'}; /* 待排列组合的数据空间 */

/*

* permute(pos -- 表示在解空间中填写数据的下标位置)

* {

* 如果解空间填写满了 打印解空间当前的排列结果 函数返回

*

* for (i=0; i

* {

* 尝试在这个下标位置填写每一个待排列的数据

* (但这些数据可填写的前提是数据没有被标记为已使用)

*

* 填写后, 把这个下标为i的数据标记为已使用

*

* permute(pos+1); -- 填写解空间中下一个位置

*

* 下标为i的数据已参与了解空间下标pos处的排列

* 取消已使用标记(因为该数据可以在解空间其他下标处使用)

* 继续for循环考察下一个待排列数据

* }

* }

*

* used[i] == 1 - 待排列空间中下标i处的数据已被使用;

* used[i] == 0 - 可以使用待排列空间中下标i处的数据;

*/

void permute(int pos)

{

int i = 0;

if (pos == r)

{

for (i=0; i

printf("%c, ",p[i]);

printf(" ");

return;

}

for (i=0; i

{

if (!used[i])

{

used[i]++;

p[pos] = data[i];

permute(pos+1);

used[i]--;

}

}

}

void main() { permute(0); }

c语言回溯法,回溯法 实现 排列组合(C 语言版本)相关推荐

  1. 用c语言实现字母排列组合,C语言字母排列组合的实现.pdf

    C语言字母排列组合的实现 曹玉坤 2011-6-21 目录 概述3 需求3 规律3 实现算法5 难点6 代码6 概述 本文档概述字母排列组合的实现算法和分析过程,着重强调在 解决问题前,对问题的思考方 ...

  2. 用c语言实现字母排列组合,C语言字母排列组合的实现.doc

    C语言字母排列组合的实现.doc C语言字母排列组合的实现曹玉坤2011-6-21目录概述3需求3规律3实现算法5难点6代码6概述 本文档概述字母排列组合的实现算法和分析过程,着重强调在解决问题前,对 ...

  3. 三个字母排列组合c语言,n个球的排列组合算法

    /*算法说明: 问题:现在有n个球,分别编号为1,2,3···n,对这n个球有多少种不重复的排列,列出所有的排列. 解:由数学知识可知:第一个球有n种选择,第二个球有n-1个选择··所以共有n!种选择 ...

  4. python排列组合问题_回溯问题Python框架总结——排列组合问题

    本文是对leetcode回溯题的一些模板进行整理总结,很多关于回溯的blog都会引用对回溯算法的official definition和通用的解题步骤,如果是真的想研究这一算法思想,按照这样的方式来完 ...

  5. 排列组合 C语言实现

    #include <stdio.h> #include <stdlib.h>int array[] = {1,2,3,4};#define N 4 #define M 3 in ...

  6. 4个字母的排列组合c语言,1,2,3,4四个数字有多少种排列组合,是怎样的

    概述:本道作业题是明倮粤同学的课后练习,分享的知识点是怎么样才叫努力学习,指导老师为糜老师,涉及到的知识点涵盖:怎样努力才算努力? 作文-怎么样才叫努力学习,下面是明倮粤作业题的详细. 题目:怎样努力 ...

  7. c语言钻石字母图案,PS制作排列组合闪亮钻石文字图片

    作者制作钻石字方法非常不错.过程:先选择一款小点字体,输入想要的文字并复制一层:然后给两层文字分别添加图层样式,底层文字主要做出钻石效果,副本图层用来渲染颜色和增加细节:最后添加一些星光笔刷装饰即可. ...

  8. 排列组合简介以及相关问题

    排列组合问题 高中学过的知识,太久没用过了现在记录一下 排列组合问题 排列组合问题 初步了解:加法原理和乘法原理 排列组合 初识排列 定义 计算公式 初识组合 定义 公式 排列组合的三种技巧方法 1) ...

  9. LeetCode 例题精讲 | 08 排列组合问题:回溯法的候选集合

    点击关注上方"五分钟学算法", 设为"置顶或星标",第一时间送达干货. 转自面向大象编程 本期例题:LeetCode 46 - Permutations[1]( ...

最新文章

  1. zoj 3762(求三角形的最大高)
  2. IDEA 错误:找不到或无法加载主类
  3. IOC操作Bean管理XML方式(外部属性文件)
  4. Linux基本常用命令
  5. Oracle sqlplus使用总结
  6. 你不努力,就是你的错!
  7. 中国水培营养素行业市场供需与战略研究报告
  8. Audition去除音频中的人声保留背景音乐
  9. 云初起微方案中下单人、联系人、下载者三者之间是什么关系?
  10. 零基础CSS入门教程(29)–CSS下拉菜单实例
  11. flutter 报错 type ‘int‘ is not a subtype of type ‘String‘ 奇葩经历
  12. 陈莉君 linux内核,Linux内核分析与应用 西安邮电大学(陈莉君)
  13. 学会php又忘了,要学会忘记的说说,学会忘记一个人的说说
  14. HTML、CSS面试题
  15. 【探花交友DAY 08】左滑不喜欢右滑喜欢以及附近的人
  16. pycharm中使用chatgpt
  17. Installing OpenCV 2.4.9 in Ubuntu 14.04 LTS
  18. 了解阿博茨RPA生态系统
  19. Unity 使用NavMesh实现简易的摇杆功能
  20. 推荐一些硬核的公众号

热门文章

  1. 重点用能单位能耗在线监测分析系统
  2. 规范化管理的困惑、探索以及项目辅助管理工具的推荐
  3. PS制作创意木板雕刻字图案人物效果
  4. 2022年顶级网络安全工具盘点!
  5. 如何给目标机器人建模并仿真【数学/控制意义】
  6. SQL性能优化技巧,常见优化10经验,数据库查询好慢,还能怎么办
  7. 用什么来爱你,我们的民族品牌?
  8. c#:请按照以下要求设计一个学生类 Student。
  9. Python 中 pass 语句的作用是什么?
  10. 如何打造一款自己的 VSCode 主题?