在网上看到的,下保存先来,有时间再看~
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/717446ca04a6125dc5b6b54e0fa14ab4.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//**************************
下面我收集的关于排列的一些算法。有些我也具体不懂。以前没有好好学数据结构。先收集起来。慢慢研究也希望有高人来咱讲讲。
1.n个数的全排列
#i nclude <stdio.h>
const int N = 5;
int a[N] = {1,2,3,4,5};
void swap(int &a,int &b)
{
int t ;
t = a;
a = b;
b = t;
}
void permutation(int m,int n)
{
int i;
if(m==n)
{
for(i = 0;i<=n;i++)
{
printf("%d ",a[i]);
}
printf("/n");
}
for(i = m;i<=n;i++)
{
swap(a[i],a[m]);
permutation(m+1,n);
swap(a[i],a[m]);
}
}
int main()
{
permutation(0,4);
}
void swap(int &a,int &b)
{
int t ;
t = a;
a = b;
b = t;
}
void permutation(int m,int n)
{
int i;
if(m==n)
{
for(i = 0;i<=n;i++)
{
printf("%d ",a[i]);
}
printf("/n");
}
for(i = m;i<=n;i++)
{
swap(a[i],a[m]);
permutation(m+1,n);
swap(a[i],a[m]);
}
}
int main()
{
permutation(0,4);
}
2.n取r的排列
#i nclude <stdio.h>
const int N = 5;
const int N = 5;
int a[N] = {1,2,3,4,5};
int b[N];
int r = 3;
char used[N];
void perm(int pos)
{
int i;
if(pos==r)
{
for(i = 0;i<r;i++)
{
printf("%d ",b[i]);
}
printf("/n");
}
for(i = 0;i<N;i++)
{
if(!used[i])
{
b[pos] = a[i];
used[i]++;
perm(pos+1);
used[i]--;
}
}
}
int main()
{
perm(0);
}
3.n取r的组合
int b[N];
int r = 3;
char used[N];
void perm(int pos)
{
int i;
if(pos==r)
{
for(i = 0;i<r;i++)
{
printf("%d ",b[i]);
}
printf("/n");
}
for(i = 0;i<N;i++)
{
if(!used[i])
{
b[pos] = a[i];
used[i]++;
perm(pos+1);
used[i]--;
}
}
}
int main()
{
perm(0);
}
3.n取r的组合
#i nclude <stdio.h>
const int N = 9;
const int N = 9;
int a[N] = {1,2,3,4,5,6,7,8,9};
int b[N];
int r = 4;
char used[N];
int count;
void combine(int pos)
{
int i;
if(pos==r)
{
for(i = 0;i<r;i++)
{
printf("%d ",a[b[i]]);
}
printf("/n");
count++;
return;
}
//这里是关键,第i个位置上的数,只能是从排在第i位的数开始的N-r个中的一个,后面的数一定要比前面的大
for(i = (pos>0?(b[pos-1]+1):pos);i<=pos+N-r;i++)
{
if(!used[i])
{
b[pos] = i;
used[i]++;
combine(pos+1);
used[i]--;
}
}
}
int main()
{
combine(0);
}
int b[N];
int r = 4;
char used[N];
int count;
void combine(int pos)
{
int i;
if(pos==r)
{
for(i = 0;i<r;i++)
{
printf("%d ",a[b[i]]);
}
printf("/n");
count++;
return;
}
//这里是关键,第i个位置上的数,只能是从排在第i位的数开始的N-r个中的一个,后面的数一定要比前面的大
for(i = (pos>0?(b[pos-1]+1):pos);i<=pos+N-r;i++)
{
if(!used[i])
{
b[pos] = i;
used[i]++;
combine(pos+1);
used[i]--;
}
}
}
int main()
{
combine(0);
}
关键字:
排列组合算法
引用地址:
http://www.dlog.cn/html/trackback.do?id=9597&type=1 (复制地址)