hdu1716排列2
2010-08-11 19:59
190 查看
题目:hdu1716
代码:参考 http://forum.byr.edu.cn/pc/pccon.php?id=1041&nid=72574
代码:参考 http://forum.byr.edu.cn/pc/pccon.php?id=1041&nid=72574
//字典序法生成全排列 #include <iostream> #include <string> using namespace std; string input,s; void perm(){ int flag=1; if(input[0]!='0'){flag=0;cout<<input;}s=input; while(1){ int index=-1; for(int i=input.size()-2;i>=0;i--) // 从最右开始,找到第一个比右边小的数字,赋值给index { if(input[i]<input[i+1]){ index=i; break; } } if(index==-1)break; // 所有排列遍历完,break while char M='9'; // M为监视哨兼临时变量(for swap) int C; // C为所找到数字的序号 for(int i=index+1;i<=input.size()-1;i++){ // 再从最右开始,找到input[index]右边比input[index]大的数字 if(input[i]<=input[index])continue; if(input[i]<=M){ C=i; M=input[i]; } } input[C]=input[index]; input[index]=M; // 交换input[index]和input[C] int len=input.size()-1-index; for(int i=1;i<=len/2;i++){ // 将index后面的部分倒置,比如7421,倒置为1247,只需要对称交换即可 char t=input[index+i]; input[index+i]=input[input.size()-i]; input[input.size()-i]=t; } if(input[0]=='0'){ s=input;continue; } if(s[0]==input[0]){ cout<<' '<<input;s=input;flag=0; } else { if(flag==0)cout<<endl<<input;else cout<<input; s=input; } } cout<<endl; } int main(){ char str[5]; int cnt=0; //freopen("hdu1716in.txt","r",stdin); //freopen("hdu1716out.txt","w",stdout); while(cin>>str[0]>>str[1]>>str[2]>>str[3]) { str[4]='\0';input=str; if(str[0]=='0'&&str[1]=='0'&&str[2]=='0'&&str[3]=='0')break; if(cnt)cout<<endl;cnt++; perm(); } //system("pause"); //注意:有些系统虽然支持 system("pause"); //但是如果循环会结束,运行到该句就会 Wrong answer // 这是应该注意的地方。 return 0; }代码二:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main(int argc, char *argv[]) { int a[5],num=0; while(cin>>a[0]>>a[1]>>a[2]>>a[3] &&(a[0]||a[1]||a[2]||a[3])) { if(num)cout<<endl;num++; int flag=1,tmp; do { if(a[0]==0)continue; if(flag) { cout<<a[0]<<a[1]<<a[2]<<a[3];flag=0;} else if(a[0]==tmp) { cout<<' '<<a[0]<<a[1]<<a[2]<<a[3]; } else { cout<<endl<<a[0]<<a[1]<<a[2]<<a[3]; } tmp=a[0]; } while(next_permutation(a,a+4)); cout<<endl; } return 0; }
相关文章推荐
- ACM学习历程—HDU1716 排列2(dfs && set容器)
- hdu1716 排列2(排列生成算法)
- hdu1716排列2(stl:next_permutation+优先队列)
- HDU1716 排列2【全排列+输出格式】
- HDU1716 -- 全排列 -- STL -- next_permutation()
- 华中科技大HDU1716 排列
- HDU1716 排列2 next_permutation的用法
- hdu1716(排列2)
- hdu1716排列2(stl:next_permutation+优先队列)
- 水题:HDU1716-排列2
- HDU1716 全排列
- 排列搜索
- 51—Nod 1384 全排列
- 排列组合计算器
- LintCode 52-下一个排列
- Josephus排列-红黑树实现-链表实现
- hdu1027 给出n,m,求n个数的按字典序排列的第m个序列
- Android瀑布流照片墙实现,体验不规则排列的美感
- 程序员面试金典: 9.11 排序与查找 11.6给定M*N矩阵,每一行、每一列都按升序排列,请编写代码找出某元素。
- Android瀑布流照片墙实现,体验不规则排列的美感