110UVA没有循环的快速排序STL
来源:互联网 发布:网络谣言的危害 编辑:程序博客网 时间:2024/05/18 08:14
参考了http://www.cnblogs.com/devymex/archive/2010/08/10/1796178.html
的思路:
Analysis
分析
关键在于如何生成给定数量元素的全排列,很自然的使用递归算法。考虑n = 3的情况,相应的3个变量为a, b, c。在结果集里加入a作为初始化,之后b可以在a前面或后面2种位置可以插入,分别代表b < a或b > a的情况。这样就可以生成第1级的if-else语句,并递归调用至2级。对于"ba"顺序的结果集,c有三种位置可以插入,对应的语句应该是:
1
2
3
4
5
6
if
c < b
then
...
else
if
c < a
then
...
else
...
由此生成第2级的if-else语句。再递归调用至第3级,发现已到达最高级,输出结果并返回。
这道题有一个需要特别注意的地方,生成的第一道代码前不要有任何空行,每段代码后也不要紧跟着空行。而是从第二段代码开始,头部需要加一个空行。如果没有注意这个问题,会得到PE。
自己写的代码:#include<list>using namespace std;#include<stdio.h>#include<string.h>char twospace[3]=" ";void recs(int cur,int n,list<char> clist);int main(){int m;scanf("%d",&m);while(m--){int n;scanf("%d",&n);puts("program sort(input,output);");puts("var");for(int i=0; i < n;i++){if(i!=0) putchar(',');putchar('a'+i);}puts(" : integer;"); //puts("begin");printf("%s"," readln(");for(int i=0; i < n;i++){if(i!=0) putchar(',');putchar('a'+i);}puts(");"); list<char> clist;clist.push_back('a');recs(0,n,clist);puts("end.");if(m) putchar('\n');}}void recs(int cur,int n,list<char> clist){if(clist.size()==n){//for(int i=0; i<=cur;i++)printf("%s",twospace);printf("%s","writeln(");list<char>::iterator it = clist.begin();for(; it != clist.end(); it++){if(it!= clist.begin())putchar(',');putchar(*it);}puts(")");return;}list<char>::iterator it = clist.begin();list<char>::iterator end = clist.end();list<char>::iterator t;for(; it != end;){//for(int i=0; i<=cur;i++)printf("%s",twospace);if(it != clist.begin())printf("%s ","else");printf("if %c < %c then\n",cur+'b',*it);clist.insert(it,cur+'b');it--;recs(1+cur,n,clist);it = clist.erase(it);it++;}//for(int i=0; i<=cur;i++)printf("%s",twospace);printf("%s\n","else");clist.push_back(cur+'b');recs(1+cur,n,clist);clist.pop_back();return;}
0 0
- 110UVA没有循环的快速排序STL
- UVA 110 没有循环的排序程序
- UVa 110 没有循环的排序程序
- 没有优化的快速排序
- uva110 没有循环的排序程序
- STL 快速排序
- STL快速排序
- 没有循环的循环
- uva110-Meta-Loopless Sorts(没有循环的排序程序)
- 快速排序,归并,堆 ,STL
- 使用stl实现快速排序
- STL中与快速排序媲美的merge sort
- 适用于STL泛型的快速排序算法设计
- STL list 的循环
- 快速排序代码(注意死循环的条件)
- 双向链表循环的快速排序调用函数
- uva 11582 快速幂 Fibonacci循环节
- UVa 10098 - Generating Fast STL 排序+排列
- 左右最值最大差(贪心)
- GitHub的使用教程之《注册账号》
- 考察对类加载的理解(问题篇)
- 设计模式:学习笔记(1)——单例模式
- Linux面试题&答案01
- 110UVA没有循环的快速排序STL
- 【PAT】1094. The Largest Generation
- Codeforces 673C Bear and Colors【暴力枚举】
- 考察对类加载的理解(答案篇)
- composer常用知识总结
- POJ - 2488 A Knight's Journey解题报告
- 小心jsch的sftp连接泄露
- 预定义常量_WIN32,WIN32,_WIN64的区别
- 装箱与拆箱