buaaoj230——next_permutation的应用
2016-11-29 20:26
274 查看
题目地址
简单的全排列输出,借用stl中的next_permutation就非常简单了。
关于next_permutation:(备忘,来源网络)
本题参考代码:
简单的全排列输出,借用stl中的next_permutation就非常简单了。
关于next_permutation:(备忘,来源网络)
1 /*这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm> 2 与之完全相反的函数还有prev_permutation*/ 3 4 5 //(1) int 类型的next_permutation 6 7 int main() 8 { 9 int a[3]; 10 a[0]=1;a[1]=2;a[2]=3; 11 do 12 { 13 cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl; 14 } while (next_permutation(a,a+3)); //参数3指的是要进行排列的长度 15 16 //如果存在a之后的排列,就返回true。如果a是最后一个排列没有后继,返回false,每执行一次,a就变成它的后继 17 18 19 } 20 21 输出: 22 23 1 2 3 24 1 3 2 25 2 1 3 26 2 3 1 27 3 1 2 28 3 2 1 29 30 31 如果改成 while(next_permutation(a,a+2)); 32 则输出: 33 1 2 3 34 2 1 3 35 36 只对前两个元素进行字典排序 37 显然,如果改成 while(next_permutation(a,a+1)); 则只输出:1 2 3 38 39 40 41 若排列本来就是最大的了没有后继,则next_permutation执行后,会对排列进行字典升序排序,相当于循环 42 43 int list[3]={3,2,1}; 44 next_permutation(list,list+3); 45 cout<<list[0]<<" "<<list[1]<<" "<<list[2]<<endl; 46 47 //输出: 1 2 3 48 49 50 51 52 53 (2) char 类型的next_permutation 54 55 int main() 56 { 57 char ch[205]; 58 cin >> ch; 59 60 sort(ch, ch + strlen(ch) ); 61 //该语句对输入的数组进行字典升序排序。如输入9874563102 cout<<ch; 将输出0123456789,这样就能输出全排列了 62 63 char *first = ch; 64 char *last = ch + strlen(ch); 65 66 do { 67 cout<< ch << endl; 68 }while(next_permutation(first, last)); 69 return 0; 70 } 71 72 //这样就不必事先知道ch的大小了,是把整个ch字符串全都进行排序 73 //若采用 while(next_permutation(ch,ch+5)); 如果只输入1562,就会产生错误,因为ch中第五个元素指向未知 74 //若要整个字符串进行排序,参数5指的是数组的长度,不含结束符 75 76 77 78 79 80 81 (3) string 类型的next_permutation 82 83 int main() 84 { 85 string line; 86 while(cin>>line&&line!="#") 87 { 88 if(next_permutation(line.begin(),line.end())) //从当前输入位置开始 89 cout<<line<<endl; 90 else cout<<"Nosuccesor\n"; 91 } 92 } 93 94 95 96 int main() 97 { 98 string line; 99 while(cin>>line&&line!="#") 100 { 101 sort(line.begin(),line.end());//全排列 102 cout<<line<<endl; 103 while(next_permutation(line.begin(),line.end())) 104 cout<<line<<endl; 105 } 106 } 107 108 109 110 111 112 113 next_permutation 自定义比较函数 114 115 116 #include<iostream> //poj 1256 Anagram 117 #include<string> 118 #include<algorithm> 119 using namespace std; 120 int cmp(char a,char b) //'A'<'a'<'B'<'b'<...<'Z'<'z'. 121 { 122 if(tolower(a)!=tolower(b)) 123 return tolower(a)<tolower(b); 124 else 125 return a<b; 126 } 127 int main() 128 { 129 char ch[20]; 130 int n; 131 cin>>n; 132 while(n--) 133 { 134 scanf("%s",ch); 135 sort(ch,ch+strlen(ch),cmp); 136 do 137 { 138 printf("%s\n",ch); 139 }while(next_permutation(ch,ch+strlen(ch),cmp)); 140 } 141 return 0; 142 }
本题参考代码:
1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 int main() 5 { 6 int a[13],l,i; 7 while(scanf("%d",&l)&&l!=0) 8 { 9 for(i=0;i<12;i++) 10 a[i]=i+1; 11 do{ 12 for(i=0;i<l;i++) 13 printf("%d",a[i]); 14 printf("\n"); 15 }while (next_permutation(a, a + l)); 16 printf("\n"); 17 } 18 }
相关文章推荐
- 排列 next_permutation的应用
- 7.2.1 生成1~n的排列(全排列)【STL__next_permutation()_的应用】
- POJ1833 & POJ3187 & POJ3785 next_permutation应用
- STL的应用 multiset bitset next_permutation
- poj 1256 Anagram—next_permutation的神奇应用
- 【C++ STL应用与实现】62: 如何使用std::next_permutation
- next_permutation的简单应用HDU1207
- HDU 1027 STL中next_permutation的应用
- LeetCode OJ Next Permutation
- HDU 1027 Ignatius and the Princess II(next_permutation()的应用)
- poj 3187 next_permutation简单应用
- HOJ 1191 (next_permutation()的应用)
- next_permutation在排列类问题中的应用
- 循环小数 南阳oj329 【KMP next数组的应用】
- hdu1027 next_permutation的应用
- HDU1716 next_permutation 的简单应用 排列2
- POj-2718 Smallest Difference--全排列next_permutation()的应用文章标题
- HDU1027(next_permutation应用)
- next_permutation应用
- next_permutation()应用举例