OnTheWay2012
埋葬昨天的我,迎来重生的我!
posts - 15,  comments - 89,  trackbacks - 0
    最近一直忙着写文档,都快忘记代码怎么写了,昨天在一本书上看到一个很经典的字符串相关的题目——给定一个字符串,求其所有可能组合。例如给定字符串是“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 阅读(1343) 评论(0)  编辑 收藏 引用 所属分类: 算法

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(4)

随笔分类

随笔档案

友情连接

搜索

  •  

最新评论

阅读排行榜

评论排行榜