M={r1, r2, r3.......rn}对M进行全排列,并输出。M中元素可能有重复。
#include
void swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
int total = 0;
void perm(int list[], int k, int n)
{
int i;
if(k>n)
{
for(i=0; i<=n; i++)
{
printf("%d", list[i]);
}
total += 1;
printf("\n");
}else
{
for(i=k; i<=n; i++)
{
if(k!=i&&list[k]==list[i])
{
continue;
}else
{
swap(&list[k], &list[i]);
perm(list, k+1, n);
swap(&list[k], &list[i]);
}
}
}
}
int main()
{
int list[] = {2,2,3};
perm(list, 0, 2);
printf("total==%d", total);
return 0;
}
阅读(788) | 评论(0) | 转发(0) |