您的位置:首页 > 其它

70 给出一个函数来输出一个字符串的所有排列

2014-10-15 22:21 453 查看
70.给出一个函数来输出一个字符串的所有排列。

ANSWER 简单的回溯就可以实现了。当然排列的产生也有很多种算法,去看看组合数学,

还有逆序生成排列和一些不需要递归生成排列的方法。

印象中 Knuth 的<TAOCP>第一卷里面深入讲了排列的生成。这些算法的理解需要一定的数

学功底,也需要一定的灵感,有兴趣最好看看。

同:/article/1554841.html

/*
70.给出一个函数来输出一个字符串的所有排列。
ANSWER  简单的回溯就可以实现了。当然排列的产生也有很多种算法,去看看组合数学,
还有逆序生成排列和一些不需要递归生成排列的方法。
印象中 Knuth  的<TAOCP>第一卷里面深入讲了排列的生成。这些算法的理解需要一定的数
学功底,也需要一定的灵感,有兴趣最好看看。

同 53
*/ 
#include<iostream>
#include<stdio.h>
using namespace std;

void swap(char *a,char *b)
{
	char t;  
    t=*a;  
    *a=*b;  
    *b=t; 
}

void printAllArray(char a[],int n,int index)
{
	int i,j;
	if(index==n)
	{
		for(i=0;i<n;i++)
			printf("%c",a[i]);
		printf("\n");
		return ;
	}
	for(j=index;j<n;j++)
	{
		swap(&a[index],&a[j]);
		printAllArray(a,n,index+1);
		swap(&a[index],&a[j]);
	}
}
int main()
{
	char a[]="abcd";
	char b[]="swg";
	int len;
	//len=sizeof(a)/sizeof(char);//5
	len=strlen(a);
	printAllArray(a,len,0);//4*3*2=24种 
	
	printf("*****************\n");
	len=strlen(b);
	printAllArray(b,len,0);//3*2=6种 
	
	return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐