考研数据结构之栈(2.5)——练习题之设计一个递归算法求n个不同字符的所有全排列(C表示)

题目

设计一个递归算法求n个不同字符的所有全排列。

分析

参见:全排列(递归算法)

代码

核心代码:

/* 所有字符的全排列 */
/* str[]指的是是字符数组;k指的是n-1;n指的是str数组的长度 */
void perm(char str[],int k,int n) {
	int i,j;
	char temp;
	if(k==0) {// 处理只有一个数的情况 
		for(j=0; j<n; j++) {
			printf("%c",str[j]);
		}
		printf("\n");// 换行 
	} else {
		for(i=0; i<=k; i++) {
			printf("[%c]",str[i]);
			temp=str[k];// str[k]与str[i]交换
			str[k]=str[i];
			str[i]=temp;
			perm(str,k-1,n);
			temp=str[i];// str[k]与str[i]交换
			str[i]=str[k];
			str[k]=temp;
		}
	}
}

完整代码:

#include<stdio.h>

#define maxSize 20

/* 所有字符的全排列 */
/* str[]指的是是字符数组;k指的是n-1;n指的是str数组的长度 */
void perm(char str[],int k,int n) {
	int i,j;
	char temp;
	if(k==0) {// 处理只有一个数的情况 
		for(j=0; j<n; j++) {
			printf("%c",str[j]);
		}
		printf("\n");// 换行 
	} else {
		for(i=0; i<=k; i++) {
			temp=str[k];// str[k]与str[i]交换
			str[k]=str[i];
			str[i]=temp;
			perm(str,k-1,n);
			temp=str[i];// str[k]与str[i]交换
			str[i]=str[k];
			str[k]=temp;
		}
	}
}

int main() {
	char str[]= {'a','b','c'};
	int n=3;
	perm(str,n-1,n);

	return 0;
}

运行结果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章