全排列问题

来源:互联网 发布:淘宝店铺怎么开通分期 编辑:程序博客网 时间:2024/06/05 00:37
用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,

如 abc 的全排列: abc, acb, bca, dac, cab, cba


递归实现:

用123来示例下。123的全排列有123、132、213、231、312、321这六种。首先考虑213和321这二个数是如何得出的。显然这二个都是123中的1与后面两数交换得到的。然后可以将123的第二个数和每三个数交换得到132。同理可以根据213和321来得231和312。因此可以知道——全排列就是从第一个数字起每个数分别与它后面的数字交换。

  1. #include<iostream>  
  2. using namespace std;  
  3. #include<assert.h>  
  4.   
  5. void Permutation(char* pStr, char* pBegin)  
  6. {  
  7.     assert(pStr && pBegin);  
  8.   
  9.     if(*pBegin == '\0')  
  10.         printf("%s\n",pStr);  
  11.     else  
  12.     {  
  13.         for(char* pCh = pBegin; *pCh != '\0'; pCh++)  
  14.         {  
  15.             swap(*pBegin,*pCh);  
  16.             Permutation(pStr, pBegin+1);  
  17.             swap(*pBegin,*pCh);  
  18.         }  
  19.     }  
  20. }  
  21.   
  22. int main(void)  
  23. {  
  24.     char str[] = "abc";  
  25.     Permutation(str,str);  
  26.     return 0;  
  27. }  
参考:http://blog.csdn.net/hackbuteer1/article/details/7462447



0 0