C语言算法—(生成数字的组合升级)生成数据的全排列(类似建立树的回溯法)
来源:互联网 发布:highcharts ajax json 编辑:程序博客网 时间:2024/06/08 12:43
其实我们可以看到,在上一个算法(生成数字的组合)中,生成的数据中包含了已知数据的全排列在其中了;
所以我们可以对上一个程序生成的数据进行一次筛选就可以得到全排列;
首先,给出上一个算法(生成数字的组合)的链接:
生成数字组合
在上图中,我们可以看到属于全排列的组合和普通组合的差别在于全排列组合中的数据没有重复项,这样,就非常简单了;
我们只需要将top组合进行一次筛选,筛选出在top数组中没有重复项的即可;
#include<stdio.h>#include<malloc.h>int N;bool judge(int *tag){ for(int i=0;i<N;++i) for(int j=i+1;j<N;++j) { if(tag[i]==tag[j]) return 0; } return 1;}void build(int *a,int *tag,int n){ if(n==N) { int c[N]; for(int i=0;i<N;++i) c[i]=tag[i]; int ci; ci=judge(c); if(ci) { printf("{"); for(int i=0;i<N;++i) printf("%d",a[tag[i]]); printf("}"); printf("\n"); } return ; } for(int i=0;i<N;++i) { tag[n]=i; build(a,tag,n+1); }}int main(){ scanf("%d",&N); int *a=(int *)malloc(sizeof(int)*N); for(int i=0;i<N;++i) scanf("%d",&a[i]); int tag[N]; build(a,tag,0); return 0;}
0 0
- C语言算法—(生成数字的组合升级)生成数据的全排列(类似建立树的回溯法)
- C语言算法—(生成子集的升级)生成数据的全部组合(含重复数字)(类似建立树的回溯法)
- C语言算法—生成数集的所有子集(类似建立树的回溯法)
- 全排列的生成算法(转帖)
- 全排列的算法(六)——回溯法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 全排列的生成算法
- 八、全排列与组合的生成
- 浅谈全排列与组合的生成
- C语言实现全排列(部分算法参考网友,可实现重复字符的组合)
- 一个排列、组合的生成算法 [zz]
- 清除浮动
- uva112-Tree Summing[动态建树]
- 25个常用的iptables用法详解以及iptables的基本术语
- 写一个函数,只要调用一次就可以将参数的值,增加1
- 写给2017年的自己
- C语言算法—(生成数字的组合升级)生成数据的全排列(类似建立树的回溯法)
- 2.Git常用方法
- 3.26 校赛及选拔赛
- 加密算法之对称加密--DES
- Java网络爬虫(二)--HttpClient设置头部信息(模拟登录)
- Prim算法
- redis之redis.conf
- 时频联合分析
- cccc L1-009. N个数求和