---------------------------------------------------------------------------
求从 n 个元素里取 m 个的所有组合。
#include <stdio.h>
#include <string.h>
#define MAX 100
void print(const int * array, int m)
{
int i;
for (i = 0; i < m; ++i)
{
printf("%d", array[i]);
}
printf("/n");
}
int combin(int n, int m)
{
int first = 0;
int count = 0;
int array[MAX];
memset(array, 0, sizeof(array));
while (first >= 0)
{
int i;
if (array[first] >= (n - m + first + 1))
{
--first;
continue;
}
++array[first];
for (i = first + 1; i < m; ++i)
{
array[i] = array[i - 1] + 1;
}
print(array, m);
++count;
first = i - 1;
}
return count;
}
int main(int argc, char * argv[])
{
printf("total: %d/n", combin(7, 3));
return 0;
}
参考:
1. 《组合数学》第三版,定理 4.4.1
2. http://blog.youkuaiyun.com/jiumingmao11982/archive/2006/11/12/1380301.aspx
---------------------------------------------------------------------------