Chinaunix首页 | 论坛 | 博客
  • 博客访问: 33829
  • 博文数量: 5
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 62
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-17 20:56
个人简介

品味工作生活人生,实现自我人生价值,

文章分类
文章存档

2014年(5)

分类: C/C++

2014-04-18 19:22:03

  

全排列递归算法

void swap(int *a,int *b){

    int m = *a;*a = *b;*b = m;

}

bool isSwap(int list[],int front,int back)

{

    for(int i=front;i

       if(list[i] == list[back]){return false;}

    }

    return true;

}

void perm(int list[],int k,int m)

{

    /* 迭代至最后一个k==m,可以直接执行打印,也可以再次执行交换迭代一次,

     * 前提自比isSwap返回true;否则会发生两部执行的场景,使得全部迭代全失效 */

     if(k>m)

     {

        for(int i=0;i<=m;i++)

        {

            printf("%d",list[i]);

        }

        printf("\n");

     }

     else

     {

        for(int i=k;i<=m;i++)

        {

/* front==back-->返回True,确保迭代次数(k+1),否则会终点断链; */

            if(isSwap(list,k,i))

            {

               swap(&list[k],&list[i]);

               perm(list,k+1,m);

               swap(&list[k],&list[i]);

            }

        }

     }

}

int main() {

    int list[] = {0,1,2,3};

    perm(list,0,3);

    return 0;

}

阅读(2110) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

7大爷2014-04-21 11:09:16

不错