1. 程式人生 > >[遞迴] 全排列-C語言

[遞迴] 全排列-C語言

使用此方法很容易能理解該遞迴演算法 在這裡插入圖片描述

#include<stdio.h>
#include<string.h>
void swap(char *a, char *b) {
	char tmp;
	tmp = *a;
	*a = *b;
	*b= tmp;
}
void permutation(char* str,int sbegin,int send)    //全排列的非去重遞迴演算法  
{  
	int i;
    if(sbegin == send) //當 sbegin = send時輸出  
    {  
        for( i = 0; i<=send;
i++) //輸出一個排列 printf("%c", str[i]); printf("\n"); } else { for( i = sbegin; i <= send; i++) //迴圈實現交換和sbegin + 1之後的全排列 { swap(&str[i], &str[sbegin]); //把第i個和第sbegin進行交換 permutation(str, sbegin + 1, send); swap
(&str[i], &str[sbegin]); //【注1】交換回來 } } } int main() { char tmp[50]; scanf("%s", tmp); printf("全排列:\n"); permutation(tmp, 0, strlen(tmp)-1); }