- 浏览: 309311 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
找工作,笔试经常会出现一个题,怎样生成一个集合内所有元素的全排列。刚开始的时候没有觉得这是一个难的问题。其实,当写在试卷上,真的不太会,作答的过程感觉心里没有什么底。
回来后,查了一些资料,看了一些书,对这个问题有一定的认识,举一个例去清晰一下题目的意思,例子为:字符集{1,2,3}的全排列:123,132,312,321,231,213。
进一步认识全排列生成:
进一步方法考察:
经过学习与查找,找到如下的算法描述:
觉得这个算法提供一个实现能枚举全部合条件的数据,用C语言进行一个实现:
看看程序运行结果:#include<stdio.h>
#define N 4
typedef struct node{
int value ;
int flag ;
}node;
node a[N] ;
void init(){
int i ;
for(i = 0 ; i < N ; i++){
a[i].value = i + 1 ;
a[i].flag = 0 ;//向左指向的
}
}
void change_flag(int n){
int i ;
for(i = 0 ; i < N ; i++){
if(a[i].value > n){
a[i].flag = (a[i].flag == 1) ? 0 : 1 ;
}
}
}
void exchange(int x,int y){
int temp ;
int f ;
temp = a[x].value ;
f = a[x].flag ;
a[x].value = a[y].value ;
a[x].flag = a[y].flag ;
a[y].value = temp ;
a[y].flag = f ;
}
int main(){
init() ;
int i , j ,max_ind ;
int max;
int count = 0 ;
while(1){
++count ;
for(i = 0 ; i < N ; i++){
printf("%d",a[i].value) ;
}
printf("\n") ;
max_ind = 0 ;
max = -1 ;
for(i = 0 ; i< N ; i++){//最大的数下标
if(a[i].flag){//向右指
if( i < N-1 && a[i+1].value<a[i].value && max < a[i].value) {
max_ind = i ;
max = a[i].value ;
}//右边的数比较小
}
else{//向左指
if( i > 0 && a[i-1].value < a[i].value && max < a[i].value ) {
max_ind = i ;
max = a[i].value ;
}//左边的数比较小
}
}
if(max == -1){break ;}
change_flag(a[max_ind].value) ;
if(a[max_ind].flag){//向右指时,与右边的交换
j = max_ind + 1 ;
}
else{//向左指,与左边的与之交换
j = max_ind - 1 ;
}
exchange(max_ind,j) ;
}
printf("sum = %d",count) ;
return 0 ;
}
虽然实现了,可是代码一点都不简洁,请各位多多指教。
发表评论
-
vs2008【断点无效】解决方法
2015-04-13 10:05 792有时候,我们在用vs2008调试的时候,会出现断点无效。如下 ... -
C++模板之特化与偏特化详解
2015-01-07 14:44 837转自:http://www.jb51.net/a ... -
c++中的typename与class<转>
2015-01-07 08:51 831在泛型编程的形参表中,关键字typename和class具有 ... -
traits:Traits技术初探
2015-01-06 12:49 804概述:traits是一种特性萃取技术,它在Generic ... -
POD型别
2015-01-06 12:37 771POD全称Plain Old Data。通俗的讲,一个类或结 ... -
c++核心基础知识(内存管理)
2015-01-04 22:22 708内存管理是C++最令人切 ... -
内存分配器<转>
2015-01-04 22:07 1391题记:内存管理一直 ... -
operator new在C++中的各种写法
2015-01-04 19:27 1212http://blog.sina.com.cn/s/blo ... -
可变参数va_list
2014-12-26 17:45 8851.要在函数中使用参数,首先要包含头文件<stdarg ... -
Apriori算法
2014-12-15 12:56 669http://blog.csdn.net/lizhengn ... -
map注意的两个问题
2014-12-11 14:21 644代码1 void main() { ... -
关于C++ const 的全面总结<转>
2014-11-14 12:56 763C++中的const关键字的用法非常灵活,而使用const ... -
C++DLL编程详解
2014-10-08 19:44 1658DLL(Dynamic Link Library)的 ... -
C++&&QT调试时出现的一些错误
2014-10-08 15:14 790错误 原因 解决 ... -
【转】C++ function、bind以及lamda表达式
2014-09-11 09:42 882本文是C++0x系列的第四篇,主要是内容是C++0x中新增 ... -
STL函数对象及函数对象适配器【转】
2014-09-10 09:24 495一 函数对象Functor STL中提供了一元和 ... -
typedef和typename关键字[转]
2014-09-10 09:21 6951、类型说明typedef 类型说明的格式为: type ... -
C/C++中extern关键字详解[转]
2014-09-09 11:38 5091 基本解释:extern可以置于变量或者函数前,以标示变量 ... -
MYSQL在C—API 中可用的函数
2014-08-24 23:03 611mysql_affected_rows() 返 ... -
编辑距离算法
2014-08-14 00:02 979字符串编辑距离: 是一种字符串之间相似度计算的方法。给定两个 ...
相关推荐
全排列c语言实现,经典的算法适合收藏起来看之又看,翻来覆去看
递归算法基本,输出一个数列的全排列,C语言实现
上传之后才发现头文件少了个ctype.h,因为判断非法输入的时候用到了isalpha(),不加这个头文件的话在gcc下会有警告,在VC下可能编译不过! 首先把输入的各个数由小到大进行排序,然后开始 1.找出比右边数字小的第一...
用c语言实现对一个动态数组的全排列,其中保存生成的全排列用了一个二维指针,求全排列用的递归的方法,代码在vc++6.0下调试通过,并附有详细注释。
在这个场景中,我们关注的是使用C语言来实现对5个数的全排列。C语言是一种底层、高效的编程语言,适合处理这种计算密集型的任务。 全排列的实现通常采用回溯法或递归策略。回溯法是一种试探性的解决问题的方法,当...
本源程序经过测试正常运行,且修改数组时有提示修改相关地方即可正确使用,不必理解程序是如何实现(采用递归分治策略实现)的。
在本例中,我们讨论的是使用C语言实现的全排列算法,主要关注递归方法。 在C语言中,全排列的实现通常基于回溯法。回溯法是一种试探性的解决问题的方法,它尝试分步地构造解决方案,并在每一步选择时,如果发现当前...
本文将详细介绍几种C语言实现全排列的算法,并结合“排列组合ppt详解及源代码”进行深入解析。 1. **回溯法**: 回溯法是一种试探性的解决问题方法,当发现某一步选择不正确时,可以退回一步甚至多步,重新选择...
JAVA递归实现全排列算法,含实现源代码,如a、b、c、d的全排列为: abcd abdc acbd acdb adcb adbc bacd badc bcad bcda bdca bdac cbad cbda cabd cadb cdab cdba dbca dbac dcba dcab dacb dabc
实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响
下面,我们将详细探讨如何使用Objective-C实现全排列算法,并通过数组保存结果。 首先,我们需要定义一个数组来存储原始数据,然后创建一个方法来处理全排列。这个方法将接收两个参数:一是原始数组,二是用于保存...
在本例中,我们关注的是VC++编程环境下的全排列实现,具体体现在名为"perm.cpp"的源代码文件中。 在VC++环境下编写全排列程序,通常涉及到递归或迭代的编程技巧。递归方法是通过调用自身来解决问题,而迭代方法则是...
下面我们将深入探讨如何使用Java实现字符数组的全排列。 首先,我们需要了解回溯法。回溯法是一种试探性的解决问题方法,它尝试逐步找到问题的所有解。当发现某一步无法继续找到有效解时,会退回一步,尝试其他的...
在C/C++编程语言中,实现全排列通常需要借助递归或回溯法。以下是对全排列及其C/C++实现的详细解释。 首先,全排列是指从给定的n个不同元素中取出所有可能的m个元素的排列方式,其中m小于等于n。如果m等于n,那么这...
这个C代码展示了全排列的递归实现。`perm`函数接受一个数组、当前处理的元素的索引k和数组长度m。当k大于m时,表示已经到达数组末尾,此时打印当前排列并增加计数器n。否则,遍历k到m的所有元素,与基准点交换位置,...
C语言实现全排列算法模板的方法 本文主要介绍了C语言实现全排列算法模板的方法,旨在帮助读者更好地理解和掌握全排列算法的实现过程。全排列算法是计算机科学中的一种重要算法,用于生成所有可能的排列组合。在实践...
文件名“c_N_array.doc”可能是一个文档,详细解释了这个C语言实现的全排列算法。其中可能包含了代码示例,讲解了如何使用数组来存储和生成全排列,也可能讨论了算法的时间复杂度和空间复杂度。 另一份文件“c4.txt...
c语言递归算法实现数列全排列.pdf
在C++编程中,实现全排列通常采用递归的方法,这种方法简洁且易于理解。下面我们将深入探讨全排列的原理、C++实现以及相关优化策略。 首先,全排列是指从n个不同元素中取出m个元素(m≤n),按照一定的顺序排成一列...
含相同元素的全排列问题,包括实现代码和测试代码,可直接运行,分治算法典型问题