问题描述:设有{r1,r2,...,rn}共n个元素,这n个元素中可能存在重复元素,试设计一个算法,列出这n个元素的不同排列。
问题分析:
#include <stdio.h>
#include <string.h>
int a[4]={1,1,2,2};
int notExists(int index, int left, int right)
{
int flag=1;
for(int i=left;i<index;i++){
if(a[i]==a[index]){
flag=0;
break;
}
}
return flag;
}
void perm(int left, int right)
{
if (left==right){
for(int i=0;i<4;i++)
printf("%d",a[i]);
printf("\n");
}
else{
for(int i=left;i<=right;i++){
if(notExists(i,left,right)){
int temp=a[left];
a[left]=a[i];
a[i]=temp;
perm(left+1,right);
temp=a[left];
a[left]=a[i];
a[i]=temp;
}
}
}
}
void main()
{
perm(0,3);
}