- static int g_sCnt= 0;
- //permutation的重载版本.
- voidpermutation(char* pStr, char* pBegin)
- {
- if(*pBegin == '\0')
- {
- ++g_sCnt;
- cout << pStr << endl;
- }
- else
- {
- for(char* pCh = pBegin; *pCh != '\0'; ++pCh)
- {
- //从第一个字符依次和后面的字符进行交换.
- char temp = *pCh;
- *pCh = *pBegin;
- *pBegin = temp;
- permutation(pStr,pBegin+1);
- //交换回原样,以便再递归处理后面的字符.
- temp = *pCh;
- *pCh = *pBegin;
- *pBegin = temp;
- }//end for
- }//end else
- }
- //全排列处理函数
- voidpermutation(char* pStr)
- {
- if(pStr== NULL)
- {
- return;
- }
- else
- {
- permutation(pStr,pStr);
- }
- }
- int main()
- {
- char strSrc[] = "abcd";
- permutation(strSrc);
- cout<< "共 " << g_sCnt << " 种排列!" <<endl;
- return 0;
- }
- void permutation(char* str)
- {
- int length = strlen(str);
- //第1步:排序
- sort(str,str+length);
- //第2步:调用函数next_permutation
- do
- {
- for(int i=0; i<length; i++)
- {
- cout<<str[i];
- }
- cout << endl;
- }while(next_permutation(str,str+length));
- }
- int main()
- {
- char str[] = "acb";
- permutation(str);
- return 0;
- }
来源: http://www.phpxs.com/code/1004103/