本文共 864 字,大约阅读时间需要 2 分钟。
一、递归
void permutation(char* a,int k,int m) { //a是序列数组,k是开始位置,m是最后位置 int i,j; if(k == m) { for(i=0;i<=m;i++) cout<
非递归
void permutation( char *s ) //全排列函数{ char *pEnd = s + strlen(s) - 1; char *p = pEnd; //p代表替换点 //q代表替换点的下一个数 ,pMax 代表替换点后比替换点大的最小数 char *q = new char,*pMax = new char; //注意初始化!!! while (p != s) //p == s 就结束循环 { q = p; p--; if (*p < *q) { pMax = FindMaxForOne(p,pEnd); //找与替换点交换的点 Swap(p,pMax); //交换 Reverse(q,pEnd); //将替换点后所有数进行反转 Print(s); //输出 p = pEnd; //将替换点置最后一个点,开始下一轮循环 } if (s == p) break; //结束条件 }}char* FindMaxForOne(char *p,char *q){ char *p1 = p; char *p2 = q; while (*p2 <= *p1) p2--; return p2;}
转载地址:http://qarvb.baihongyu.com/