Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74036
  • 博文数量: 29
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 272
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-05 20:32
文章分类

全部博文(29)

文章存档

2016年(2)

2015年(27)

我的朋友

分类: C/C++

2015-03-17 16:15:19

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) |
0

上一篇:R 3.1.3新特征

下一篇:求数组中的逆序对

给主人留下些什么吧!~~