最近一直忙著寫文檔,都快忘記代碼怎么寫了,昨天在一本書上看到一個很經典的字符串相關的題目——給定一個字符串,求其所有可能組合。例如給定字符串是“abc”,那么依照該題目,答案是“abc”“acb”“bac”“bca”“cab”“cba”.我看到書上給出的解釋很復雜,并且書上的東西不是自己思考的結果,所以就想自己好好想想怎么做這道題。本來感覺題目很簡單,也大概明白題目的思路,可是就是不知道如何寫程序,結果在下班回住的地方的路上想了一路,今天早上又想了一會,終于想出來了??磥砦疫€是很笨地,需要多努力,才能做到笨鳥先飛。以下是關于這個問題的詳細說明和代碼
該問題的解題思路如下圖所示:

根據該問題的解題思路,該問題的相關代碼如下:
1 #include <iostream>
2 #include <numeric>
3 #include <algorithm>
4
5 using namespace std;
6
7 void SwapItem(char *pStr, int nFirst, int nSecond)
8 {
9 char ch = pStr[nFirst];
10 pStr[nFirst] = pStr[nSecond];
11 pStr[nSecond] = ch;
12 }
13
14 void PrintSet(char *pAll, char *pSub)
15 {
16 size_t size = strlen(pSub);
17 switch (size)
18 {
19 case 1:
20 {
21 cout<<pAll<<endl;
22 break;
23 }
24 default:
25 {
26 for (unsigned int i = 0 ; i < size ; i++)
27 {
28 SwapItem(pSub, 0, i);
29 PrintSet(pAll, pSub + 1);
30 SwapItem(pSub, i, 0);
31 }
32 break;
33 }
34 }
35 }
36
37 int main(int argc, char *argv)
38 {
39 char chArr[] = "abcd";
40 PrintSet(chArr, chArr);
41 return 0;
42 }
雖然代碼是寫完了,結果也正確,但是感覺還是不太理解,哪位大俠要是看到了,能不能再解釋一下。另外感覺上面的圖和代碼不是太一致。
呵呵,看來需要很努力,才能學會點東西,太笨了。
posted on 2010-11-27 08:32
OnTheWay 閱讀(1387)
評論(0) 編輯 收藏 引用 所屬分類:
算法