[再来一个组合问题]给定f个数组,数组大小均为m,求

fengliangcc 2011-09-24 06:27:30
如题所示:

给定f个数组,数组大小均为m,现在从每个数组中抽取一个元素形成一个组合,现在要求求出所有组合

时间复杂度?

直接的做法就是:一个个数组循环:时间复杂度是m^f,

有没有更好的办法,而且这种不确定循环嵌套个数的伪代码怎么写?

THX
...全文
114 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2011-09-24
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define m 4

int func(int src[][m], int f)
{
int cnt = 0;
int cur = 0;
int *table = (int *)malloc(sizeof(int) * f);

if (NULL == table)
return 0;

table[0] = -1;
while (cur >= 0)
{
table[cur] += 1;

if (table[cur] < m)
{
if (f - 1 == cur)
{
int i;
for (i = 0; i < f; ++i)
{
printf("%d ", src[i][table[i]]);
}
printf("\n");

++cnt;
}
else
{
cur += 1;//从下一个数组中取数
table[cur] = -1;
}
}
else
{
cur -= 1;//回溯
}
}

free(table);

return cnt;
}


int main()
{
//f个数组元素个数为m个的数组, f = sizeof(a) / sizeof(a[0]),如需再添加数组,直接在a里面添加就行了
int a[][m] =
{
{1, 2, 3, 4},//数组1
{5, 6, 7, 8},//数组1
{9, 10, 11, 12}//数组3
};

printf("共有%d中组合\n", func(a, sizeof(a) / sizeof(a[0])));

system("pause");
return 0;
}



fanster28_ 2011-09-24
  • 打赏
  • 举报
回复
现在要求求出所有组合 数? 又是背包问题

而且这种不确定循环嵌套个数的伪代码怎么写?
递归

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧