学习日记四:全排列(不含重复数)
忽然想起以前在书上看到的全排列问题,当时只看了方法,不知道怎么写代码,今天试写,练习递归
1,2,3,4全排列
step1:将2,3,4与1分别交换,并作后三位的全排列(后三位的全排列方法与4位相同)
step2:将3,4分别与2交换,并作后两位的全排列
。。。。
一直这样做直到遇到后面没有数据的4。即将每一项与第一项交换,并作第一项以外的全排列,当然这里的第一项是动态的
定义函数allarray(j,k,a[])功能:对数组a[]进行从j到k的全排列。
程序代码:
#include <stdio.h> void swap( int j , int k , int a[] ) { int temp; temp=a[j] ; a[j]=a[k] ; a[k]=temp ; } void AllArray( int j , int k , int a[] ) { int i ; if(j==k) { for(i=0 ; i<=k ; i++) printf( "%d",a[i] ); printf("\n"); } else { for(i=j ; i<=k ; i++) { swap( i , j , a ) ; AllArray( j+1 , k , a ) ; swap( i , j , a ) ; } } } void main() { int a[10]={0} ; int N ; int i ; scanf( "%d",&N ); for(i=0 ; i<N ;i++) scanf( "%d",&a[i] ); AllArray(0,N-1,a) ; }