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