Posted in C/C++ 9 条留言
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
/*
CSDN上说是迅雷招人的题。
字符串长度为N,生成N个字符的全排列,就是生成1个字符加上N-1个字符的全排列。
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
 
void myswap(char *p, int i, int j)
{
	char c = p[i];
	p[i] = p[j];
	p[j] = c;
}
 
void generate(char *p, int start, int len)
{
	if(start==len) 
	{
		printf("%s\n", p);
		return ;
	}
	int i = 0;
	for(i=0; i<len-start; i++)
	{
		myswap(p, start, i+start);
		generate(p, start+1, len);
		myswap(p, start, i+start);
	}
}
 
 
 
void myswap1(char *p, char *q)
{
	char c = *p;
	*p = *q;
	*q = c;
}
void generate1(char *str, char *p ,int len)
{
	if(len == 0)
	{
		printf("%s\n", str);
		return;
	}
 
	int i=0;
	for(i=0; i<len; i++)
	{
		myswap1(p, p+i);
                generate1(str, p+1, len-1);	
		myswap1(p, p+i);
	}
}
 
void foo(const char *str)
{
	int len = strlen(str);
	char *p = (char *) malloc (len+1);
	if(p==NULL) exit(1);
	memcpy(p, str, len+1);
	generate(p, 0, len);
        //generate1(p, p, len);//这个好像更好一些	
	free(p);
}
 
 
 
int main()
{
	char *str = "abcde";
	foo(str);
	return 0;
}
August 27, 2010