您的位置:首页 > 其它

字符串全排列问题

2009-04-26 11:19 218 查看
分析:采用迭代法进行求解

当字符串有两个元素ab,除了本身ab,再交换最后一位和最后二位,得到ba。

当字符串有三个元素abc时得到abc,acb, bac,bca,cba,cab。

算法:用start和end标记字符串开头和结尾

1,如果开头和结尾相等,则输出串,迭代终止。

2,从字符串开头开始遍历每一个字符,与开头字符串交换。

3,对新串迭代执行本程序,开头标记加1。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

static void arrange(char *s, int start, int end);

int main(int argc, char **argv)
{
if (argc != 2) {
printf("usage: ./allrange <string>/n");
exit(EXIT_FAILURE);
}

arrange(argv[1], 0, strlen(argv[1]));

exit(EXIT_SUCCESS);
}

static void arrange(char *s, int start, int end)
{
int     i;
char    tmp;

if (start == end) {
printf("%s/n", s);
} else {
for (i = start; i < end; i++) {
tmp = s[start]; s[start] = s[i]; s[i] = tmp;
arrange(s, start + 1, end);
tmp = s[start]; s[start] = s[i]; s[i] = tmp;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: