国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

所有情況下全排列的實(shí)現(xiàn)

2019-11-14 09:31:10
字體:
供稿:網(wǎng)友

全排列是將一組數(shù)按一定順序進(jìn)行排列,如果這組數(shù)有n個(gè),那么全排列數(shù)為n!個(gè)。我們?cè)诖诵枰紤]重復(fù)情況。應(yīng)用遞歸算法實(shí)現(xiàn)排序。

1.如下程序,可實(shí)現(xiàn)全排列,但是缺少判斷函數(shù)不能處理重復(fù)情況。

#include <stdio.h>int permutation( char s[], int b, int e ){	if( 0 <=b && b <= e)	{		if( b == e )		{			PRintf( "%s/n",s);			}		else		{			int i;			for( i=b; i<=e; i++)			{				char c = s[b];				s[b] = s[i];				s[i] = c;				permutation( s, b+1, e);				c = s[b];				s[b] = s[i];				s[i] = c;				}			}		}}int main() {	char s[] = "123";	permutation( s,0,2);		return 0;}2.加入判斷函數(shù)后可處理重復(fù)情況。

#include <stdio.h>int is_swap(char s[], int begin, int k){	int i;	for (i = begin; i < k; i ++)		if(*(s + i) == *(s + k))			return 0;	return 1;}void permutation(char s[], int b, int e){    if( (0 <= b) && (b <= e) )    {        if( b == e )        {            printf("%s/n", s);        }        else        {            int i = 0,m = 0,zx = 1;                        for(i=b; i<=e; i++)            	if(is_swap(s,b,i))            	{                	char c = s[b];                	s[b] = s[i];                	s[i] = c;                                                	permutation(s, b+1, e);                                	c = s[b];                	s[b] = s[i];                	s[i] = c;            	}        }    }}int main(){    char s[] = "aabb";        permutation(s, 0, sizeof(s) - 2);    printf("%d",sizeof(s));        return 0;}3.優(yōu)化,寫出交換函數(shù),直接調(diào)用調(diào)換函數(shù)進(jìn)行調(diào)換。

#include <stdio.h>//#include <stdlib.h>#include <string.h>void swap(char *str, int begin, int k){	char tmp;	tmp = *(str + begin);	*(str + begin) = *(str + k);	*(str + k) = tmp;}int is_swap(char *str, int begin, int k){	int i;	for (i = begin; i < k; i ++)		if(*(str + i) == *(str + k))			return 0;	return 1;}void permutation(char *str, int begin, int end){	int k;	if (begin == (end - 1)) 	{		printf("%s/n", str);		return;	}	for (k = begin; k < end; k++)		if(is_swap(str, begin, k)) 		{			swap(str, begin, k);			permutation(str, begin + 1, end);			swap(str, begin, k);		}}int main(void){	char str[10];	int length;	gets(str);	length = strlen(str);	printf("%d/n", length);	permutation(str, 0, length);	return 0;}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 牟定县| 岑溪市| 松阳县| 开阳县| 临颍县| 普洱| 武汉市| 通河县| 桂林市| 上饶市| 梁山县| 桓仁| 嘉兴市| 南安市| 文安县| 阿拉善盟| 开原市| 五大连池市| 韩城市| 察隅县| 沅江市| 峡江县| 兰州市| 潼南县| 库车县| 桐乡市| 南康市| 施秉县| 白河县| 恭城| 拜城县| 深水埗区| 阿拉善左旗| 郴州市| 桂林市| 浙江省| 信阳市| 阿克陶县| 泸溪县| 临桂县| 新平|