c语言重复字符串全排列,枚举全排列(包括数列中有重复数)的C语言实现

据说是用了DFS的思想……然鹅并不知道这是DFS。

主要就是选取一个数放到数组相应位置上,然后递归的排列剩下的数组,将剩下的数组递归排列完了之后再把数放回去,然后这一层递归就返回了……

有重复数的话遇到重复的不要重复放置就好了……

//

// main.c

// Full Permutation

//

// Created by 余南龙 on 2016/12/13.

// Copyright © 2016年 余南龙. All rights reserved.

//

#include

void Swap(int *a, int *b){

int tmp = *a;

*a = *b;

*b = tmp;

}

void Output(int A[], int size){

int i;

; i < size; i++){

printf("%d ", A[i]);

}

putchar('\n');

}

void Full_Permutation(int A[], int begin, int end, int p_size){

int i;

if(begin >= p_size){

Output(A, p_size);

}

else{

for(i = begin; i <= end; i++){

Swap(A + begin, A + i);

Full_Permutation(A, begin + , end, p_size);

Swap(A + begin, A + i);

}

}

}

void Full_Permutation_Duplicate(int A[], int begin, int end, int p_size){

int i, j;

if(begin >= p_size){

Output(A, p_size);

}

else{

for(i = begin; i <= end; i++){

for(j = begin; j < i; j++){

if(A[j] == A[i]){

break;

}

}

if(i == j){

Swap(A + begin, A + i);

Full_Permutation_Duplicate(A, begin + , end, p_size);

Swap(A + begin, A + i);

}

}

}

}

int main() {

] = {, , , , , };

] = {, , , , };

Full_Permutation(A, , , );

Full_Permutation_Duplicate(B, , , );

}

poj3187-Backward Digit Sums&lpar;枚举全排列&rpar;

一,题意: 输入n,sum,求1~n的数,如何排列之后,相邻两列相加,直到得出最后的结果等于sum,输出1~n的排列(杨辉三角)  3 1 2 4 //1~n 全排列中的一个排列  4 3 6  7 ...

poj2718-Smallest Difference&lpar;枚举全排列&rpar;

一,题意: 给出最多10个数字,将它们划分为两个整数,求差值最小的值(除非只有一位数,否则不允许出现先导0) 很显然如果总共有n个数,必然有一个整数长n/2,另一个长n-n/2.二,思路: 利用nex ...

UVa140 Bandwidth 小剪枝&plus;双射小技巧&plus;枚举全排列&plus;字符串的小处理

给出一个图,找出其中的最小带宽的排列.具体要求见传送门:UVa140 这题有些小技巧可以简化代码的编写. 本题的实现参考了刘汝佳老师的源码,的确给了我许多启发,感谢刘老师. 思路: 建立双射关系:从字 ...

【搜索】POJ-3187 枚举全排列

一.题目 Description FJ and his cows enjoy playing a mental game. They write down the numbers from 1 to ...

Anagram——[枚举全排列]

预备知识: 1.求0—n个数全排列的算法: void print_permutation(int n,int *A,int cur){ if(cur==n){ ;i

斐波那契数列的实现(C语言)

int fibonacci(int positon){ if(position==1||position==2){ return 1; } return fibonacci(position-1)+f ...

【刷题记录】 &amp&semi;&amp&semi; 【算法杂谈】折半枚举与upper&lowbar;bound 和 lower&lowbar;bound

[什么是upper_bound 和 lower_bound] 简单来说lower_bound就是你给他一个非递减数列[first,last)和x,它给你返回非递减序列[first, last)中的第一 ...

POJ 2785 4 Values whose Sum is 0(折半枚举&plus;二分)

4 Values whose Sum is 0 Time Limit: 15000MS   Memory Limit: 228000K Total Submissions: 25675   Accep ...

&lbrack;Leetcode&rsqb; permutations ii 全排列

Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

随机推荐

Framer – 将视觉搞转换为更真实的动态原型

Framer 是一个 JavaScript 框架,简化了创建现实原型,实现完整的3D效果.以一种简单,可读的和强大的方式定义交互和创建动画. 另外还有 Framer Generator  是一个桌面应 ...

Centos&colon; 修改 yum安装的mysql路径

1.使用命令service mysqld stop 停止mysql查看mysql数据库的默认路径:/var/lib/mysql使用cp -afir  /var/lib/mysql/*   /usr/l ...

善用VS中的Code Snippet来提高开发效率

http://www.cnblogs.com/anderslly/archive/2009/02/16/vs2008-code-snippets.html http://www.cnblogs.com ...

How to run a &lpar;Tomcat&rpar;Java application server on a Azure virtual machine

http://www.windowsazure.com/en-us/documentation/articles/virtual-machines-java-run-tomcat-applicatio ...

Java中ExecutorService和CompletionService区别

我们现在在Java中使用多线程通常不会直接用Thread对象了,而是会用到java.util.concurrent包下的ExecutorService类来初始化一个线程池供我们使用. 之前我一直习惯自 ...

org&period;apache&period;hadoop&period;filecache-&ast;

我不知道为什么这个包为什么是空的,从名字上看应该是一些管理文件缓存的类吗? 网上也没查到什么,各种群里也没大牛回答. 期望某位大牛能告诉我答案,谢谢

ajax 做登录 实现页面免刷新

结合之前学的知识,可以用ajax来传递数据,实现页面不用刷新,仅数据刷新,来看一下ajax是怎么来实现页面免刷新的 方的是客户端,圆的是服务器 如果没有ajax的话,客户端直接把数据传给服务器,服务器 ...

RocketMQ知识整理与总结

1.架构 RocketMQ的master broker与master broker没有任何消息通讯,nameserver之间也同样没有消息通信 MQ历史 由数据结构队列发展而来 MQ使用场景    异 ...

Linux环境下安装SQL Server 2017

参考链接 https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-red-hat?view=sql-server-2 ...

你不知道的JS(3)来聊聊this

为什么要使用this?什么是this? 来看一段代码 function identify() { return this.name.toUpperCase(); } function speak() ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值