UVa 10098 快速生成有序排列
来源:互联网 发布:淘宝店怎么引来流量 编辑:程序博客网 时间:2024/06/05 18:49
题意:对输入的字符串,按字典序升序输出所有种排列。
思路:这个基础就是之前将到的枚举排列问题,只不过当时是整型,这里是字符型。
注意:一个是输出的时候每组数组后都要输出一个空行(虽然你去复制sample out会发现最后一组数据没空行,但程序里的确是包括最后一组数据后都有空行)
第二是因为这里是字符型,输出的时候直接按字符串输出即可,但是需要在排列数组的最末位加'\0'!还有,在最开始需要对字符串排序一下。
Code:
#include<stdio.h>#include<string.h>#include<stdlib.h>void print_permutation(int n,char *str,char *A,int cur);int cmp_char(const void *_a, const void *_b);char str[15];char A[15];int main(){ int n; scanf("%d",&n); while(n-->0) { scanf("%s",str); qsort(str,strlen(str),sizeof(str[0]),cmp_char); print_permutation(strlen(str),str,A,0); printf("\n"); } return 0;}int cmp_char(const void *_a, const void *_b){ return *(char*)_a - *(char*)_b;}void print_permutation(int n,char *str,char *A,int cur){ if(cur==n) { A[cur]='\0'; printf("%s\n",A); } else for(int i=0;i<n;++i) if(!i||str[i]!=str[i-1]) { int c1=0,c2=0; for(int j=0;j<cur;++j) if(str[i]==A[j]) c1++; for(int j=0;j<n;++j) if(str[i]==str[j]) c2++; if(c1<c2) { A[cur]=str[i]; print_permutation(n,str,A,cur+1); } }}
0 0
- UVa 10098 快速生成有序排列
- 10098uva快速生成有序排列
- UVA 10098 快速生成有序序列
- uva10098 - Generating Fast(快速生成有序排列)
- 有序全排列生成算法
- 有序全排列生成算法
- UVa 10098 Generating Fast (全排列生成)
- 有序全排列生成算法集锦
- 非有序全排列生成算法集锦
- 非有序全排列生成算法
- 非有序序全排列生成算法
- 有序全排列生成算法集锦
- 有序全排列生成算法集锦
- uva 10098(全排列)
- hdu 2019 排列有序
- 有序全排列
- 十个数有序排列
- 快速排列
- POJ 3268 Silver Cow Party(两次Dijkstra求最大值)
- 在线开发与编译的脚本语言
- Linux tree 命令用法
- 抽屉菜单(一)---简单实现
- ubuntu32位上安装android studio出现的问题
- UVa 10098 快速生成有序排列
- 起航货代软件2015最新版
- 背包之01背包、完全背包、多重背包详解 — TankyWoo
- CodeChef RRMATRIX Strange Matrix
- jQuery标题文字淡入淡出显示效果
- J2EE十三个技术规范
- AFNetworking与ASIHTTPRequest的区别
- 30岁:程序员心中永远的痛?
- 在win7中翻转鼠标滚动方向