#include <stdio.h>voidswap(char *a,char *b){
char c;
c=*a;*a=*b;*b=c;}voidPerm(char *list, int k, int m ){//产生[list[k:m]的所有排列
int i;if(k==m){//递归到只剩下一个元素for(i=0;i<=m;i++)printf("%c",list[i]);printf("\n");}else//还有多个元素待排列,递归产生排列for(i=k; i<=m; i++){swap(&list[k],&list[i]);//交换Perm(list,k+1,m);//开始递归swap(&list[k],&list[i]);//换回原样 }}
int main(){
char s[]="abc";Perm(s,0,2);return0;}
数字
#include <stdio.h>voidswap(int *a,int *b){
int c;
c=*a;*a=*b;*b=c;}voidPerm(int *list, int k, int m ){//产生[list[k:m]的所有排列
int i;if(k==m){//只剩下一个元素for(i=0;i<=m;i++)printf("%d",list[i]);printf("\n");}else//还有多个元素待排列,递归产生排列for(i=k; i<=m; i++){swap(&list[k],&list[i]);Perm(list,k+1,m);swap(&list[k],&list[i]);}}
int main(){
int s[]={1,2,3};Perm(s,0,2);return0;}