考研數據結構之棧(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;
}

運行結果:

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