设为首页 加入收藏

TOP

C++编程实例:全排列
2014-11-24 03:08:16 来源: 作者: 【 】 浏览:1
Tags:编程 实例 排列

  1、将一个n维数组初始化,第0位填1,第1位填2.。。。。。 第n-1位填n;


  2、将数组看为两部分,一个是已排好的,剩下是待排的,分别用两个指针指向;


  3、将第一个字符,依次与后n-1个字符交换值,每次交换得到一个新的首数字;


  4、剩下的n-1个数字按2、3步骤重复直至所有数组完成排列;


  使用c++实现,代码还有些繁琐,明天再仔细看看优化一下


  代码


  1 #include


  2 using namespace std;


  3


  4 void swap(int *p1,int *p2)


  5 {


  6 //交换p1和p2指向的值


  7 int tmp=*p1;


  8 *p1=*p2;


  9 *p2=tmp;


  10 }


  11 void output(int *p,int n)


  12 {


  13 while(n>0)


  14 {


  15 cout<<*p;


  16 p++;


  17 n--;


  18 }


  19 cout<<"\n";


  20 }


  21


  22 void fill(int *p1,int *p2,int len,int n)


  23 {//p1指向已填满的部分,始终指向第一个;


  24 //p2指向尚余下的部分,待插入那个;


  25 //len表示已填部分的长度,n表示数组长度


  26 if(len==n-1)


  27 {


  28 output(p1,n);//输出全部数组


  29 }


  30 else


  31 {


  32 int *p3,*p4;


  33 int *pp=(int *)malloc(n*sizeof(int));


  34 for(int i=0;i

  35 {


  36 *(pp+i)=*(p1+i);


  37 }


  38 p3=pp;


  39 while(*p3!=*p2)


  40 {


  41 p3++;


  42 }


  43 p4=p3;


  44


  45 for(int i=0;i

  46 {


  47 swap(p3,p4);


  48 p4++;


  49 fill(pp,p3+1,len+1,n);


  50 }


  51 }


  52 }


  53


  54 void inti(int *p,int n)


  55 {//将数组中所有的元素全部初始化,


  56 int num=1;


  57 while(num<=n)


  58 {


  59 *p=num++;


  60 p++;


  61 //cout<

  62 }


  63 }


  64


  65 int main()


  66 {


  67 int *p,n;


  68 cout<<"请输入全排列规模:";


  69 cin>>n;


  70 p=(int *)malloc(n*sizeof(int));


  71 inti(p,n);


  72 fill(p,p,0,n);


  73 return 0;


  74 }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中主函数怎么调用其他函数 下一篇用Java方法解决Groovy 中文乱码

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)