(分享) 递归 求组合
。。。。。。。。
[ 本帖最后由 BlueGuy 于 2011-3-10 20:39 编辑 ]


程序代码:int next_combination(int* pArray, int nLen, int nSel)
{
if (pArray[nLen - 1] + 1 < nSel)
{
++pArray[nLen - 1];
return 1;
}
else
{
int it = 2;
while (it <= nLen && pArray[nLen - it] + it == nSel)
++it;
if (it <= nLen)
{
int i;
pArray[nLen - it]++;
for (i = nLen - it + 1; i < nLen; ++i )
pArray[i] = pArray[i - 1] + 1;
return 1;
}
else
return 0;
}
}
#include <stdio.h>
int main()
{
int arrmap[] = {1, 2, 3, 4, 5};
int arr[20];
int len = 4, i;
for (i = 0; i < len; ++i) arr[i] = i; //初始化数组
do //枚举组合的循环
{
for (i = 0; i < len; ++i) //打印组合
{
printf("%d ", arrmap[arr[i]]);
}
puts("");
} while ( next_combination(arr, len, sizeof(arrmap) / sizeof(int)) ); //获取下一个组合
scanf("%*s");
return 0;
}
