天天看點

POJ-1256 next_permutation函數應用

字典序列:

在字典序中蘊含着一個點,就是大小的問題,誰先出現,誰後出現的問題。譬如a<b<c,出現順序就是a,b,c。

本題中字元集是所有大小寫字母,而題目中規定的誰大誰小已經不是按ascii碼排了,而是A<a<B<b<C<c……,那麼不管在排序的時候還是調用next_permutation中我們都需要指明cmp這個比較大小的函數。

1:sort(data, data+length, cmp)

2:next_permutation(data, data+length, cmp)

注意cmp函數說簡單點就是指明什麼叫“小于”的關系。

主要是next_permutation函數自定義排序的簡單例子,與sort函數排序一樣

題目連結:poj.1256題

#include<algorithm>
#include<string.h>
#include<iostream>
using namespace std;
bool cmp( char a, char b)
{
    if(a <= 'Z' && a >= 'A' && b <= 'Z' && b >= 'A')
        return a < b;
    if(a <= 'z' && a >= 'a' && b <= 'z' && b >= 'a')
        return a < b;
    if(a <= 'Z' && a >= 'A' && b <= 'z' && b >= 'a')
        return a + 32 <= b;
    if(a<='z' && a >='a' && b <= 'Z' && b >= 'A')
        return a < (b + 32);
}
int main()
{


    int n;
    cin>>n;
    while(n--)
    {
    char aa[120];
    cin>>aa;
    int a=strlen(aa);
    sort(aa,aa+a,cmp);
    cout<<aa<<endl;
    while(next_permutation(aa,aa+a,cmp))
    {
    cout<<aa<<endl;

    }


    }
return 0;
}
      

繼續閱讀