欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

排列组合算法

程序员文章站 2022-05-21 23:18:07
...
#include <stdio.h>  

int n = 0;

void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf("\n");
n++;
}
else
{
for(i = k; i <= m; i++)
{
//交换i和k的值
swap(&list[k], &list[i]);
perm(list, k + 1, m);
//交换i和k的值,使数组还原
swap(&list[k], &list[i]);
}
}
}
int main()
{
int list[] = {1, 2, 3, 4};
perm(list, 0, 3);
printf("total:%d\n", n);
return 0;
}