社区
图形处理/算法
帖子详情
有关排列组合的算法问题,请指教!
common_man
2003-05-08 03:43:17
我的程序要实现这样的功能:
有一个有N个结点的链表,每次从中复制m(m<N)个不同的结点,组成一个新的小链表,直到取出所有组合为止,比如说,对于有4个结点的链表,每次取两个结点,则要生成6个长度为2的小链表。
这个算法该怎么构思,请哪位大侠给一点指点,多谢了!
...全文
70
18
打赏
收藏
有关排列组合的算法问题,请指教!
我的程序要实现这样的功能: 有一个有N个结点的链表,每次从中复制m(m<N)个不同的结点,组成一个新的小链表,直到取出所有组合为止,比如说,对于有4个结点的链表,每次取两个结点,则要生成6个长度为2的小链表。 这个算法该怎么构思,请哪位大侠给一点指点,多谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
common_man
2003-05-10
打赏
举报
回复
多谢各位了!
regainworld
2003-05-09
打赏
举报
回复
上面没写完。。。
...
if (m==n)
{//mhead+nl为要求链表
while (p != ml)
{
printf("%d ", p->num);
p=p->next;
}
printf("%d ", ml->num);
while (nl)
{
printf("%d ", nl->num);
nl=nl->next;
}
printf("\n");
return;
}
//c(m-1,n-1)
p=new list;
p->num=nl->num;
p->next=null;
ml->next=p;
GetMList(p, nl->next, m-1, n-1);
//c(m, n-1)
GetMList(ml,nl->next, m, n-1);
}
我也不知道对不对,不过思路应该差不多!
regainworld
2003-05-09
打赏
举报
回复
这题应该用递归解啊!
c(m,n)=c(m-1,n-1)+c(m,n-1) m<n
c(m,n)=1 m==n
c(0,n)=0
List *mhead,*nhead;
GetMList(list *ml,list* nl, int m, int n)
{
list *p=mhead;
if (m==0)
{//mhead为要求链表
while (p != ml)
{
printf("%d ", p->num);
p=p->next;
}
printf("%d\n", ml->num);
return;
}
if (m==n)
{//mhead+nl为要求链表
while (p != ml)
{
printf("%d ", p->num);
p=p->next;
}
printf("%d ", p->num);
while (nl)
{
printf("%d ", nl->num);
nl=nl->next;
}
printf("\n");
return;
}
}
phoenixzz
2003-05-09
打赏
举报
回复
上面没写完,下面是正确的
排列组合方法:
例如从十个里面取3个:
for(i=0; i<10; i++)
{
for(j=i+1; j<10; j++)
{
for (k=j+1; k<10; k++)
{
cout<<i<<j<<k;
}
}
}
phoenixzz
2003-05-09
打赏
举报
回复
排列组合方法:
例如从十个里面取3个:
for(i=0; i<10; i++)
{
for(j=i+1; j<10; j++)
common_man
2003-05-09
打赏
举报
回复
好!
syl08341
2003-05-09
打赏
举报
回复
你的问题是不是还没有解决,如果没有的话。
把问题在写的清楚一点。
今天晚上上网时,再帮你编写一下。
syl08341
2003-05-09
打赏
举报
回复
同意 regainworld(午夜心跳)。
我也认为应该用递归,以前做过一个类似的排列组合问题。
魔方阵。一个古老的数学问题。
当时就是用递归写的。
不过很长时间没有写过了。
所以现在写递归函数,
一是编写太慢,
二是没有绝对把握。
象phoenixzz(小百货) 的方法和我用的一样。
这种方法是最笨的方法。优点是不易出错,
并且易于检查。
缺点是不如递归容易升级。
common_man
2003-05-08
打赏
举报
回复
up
common_man
2003-05-08
打赏
举报
回复
还请各位多多指教!!
common_man
2003-05-08
打赏
举报
回复
to syl08341(沈阳老零) :
谢了!!!!
好人一生平安!
syl08341
2003-05-08
打赏
举报
回复
我用的方法是最笨的方法。
如果发现有更笨的方法,告诉我。
由于很长时间没有写链表方面的程序了。
所以许多地方写的非常差。
syl08341
2003-05-08
打赏
举报
回复
编写了半个小时,总算编写出来了。
能够实现你据说的,不过由于看错了一点,
所以写为了在六个数中取两个数的链表了。
想改成四个数中取两个数还是非常简单的。
#include <stdio.h>
struct node
{
int num;
node *next;
};
node *head = NULL;
int count = 0;
node *insert(int n)
{
node *p=new node;
node *q, *w = head;
while(w)
{
q = w;
w = w->next;
}
q->next = p;
p->next = NULL;
p->num = n;
return p;
}
node *get(int n)
{
node *p = head->next;
for(int i = 1; i < n; i++)
p = p->next;
return p;
}
void display(node *p)
{
count++;
while(p)
{
printf("%d\t", p->num);
p = p->next;
}
printf("\n");
if(count % 10 == 0)
{
printf("press any key to continue...");
getchar();
}
}
void main()
{
head = new node;
head->next = NULL;
for(int i = 1; i < 7; i++)
insert(i);
for(i = 1; i < 7; i++)
{
for(int j = 1; j < 7; j++)
{
if(j == i)
continue;
node *newhead = new node;
node *end = new node;
newhead->num = get(i)->num;
newhead->next = end;
end->num = get(j)->num;
end->next = NULL;
display(newhead);
}
}
}
syl08341
2003-05-08
打赏
举报
回复
我试着编写了一下,太麻烦了。
题目倒不难,就是太麻烦。
BlueSky2008
2003-05-08
打赏
举报
回复
参见该贴中我的方法
http://expert.csdn.net/Expert/topic/1217/1217747.xml?temp=.5448877
common_man
2003-05-08
打赏
举报
回复
我再up,up ,up
common_man
2003-05-08
打赏
举报
回复
up
common_man
2003-05-08
打赏
举报
回复
up
上台阶
问题
——利用高中
排列组合
知识
本文探讨了一种解决上台阶
问题
的动态规划
算法
,通过约分和利用
排列组合
对称性减少数据溢出。作者创建了一个Steps类,实现了getOptions()、getU()和getD()方法来计算不同台阶数的走法。在计算过程中,通过判断能否整除7的阶层进行约分,同时利用不等式优化计算,有效避免了数据溢出。文章以4、30、50为例展示了
算法
的运行结果,并表达了分享个人思路的愿望。
PHP
排列组合
算法
最近做的手游项目中说是需要
排列组合
的
算法
,我现在虽然做客户端了但是PHP还是比较熟悉的,于是就自己练练手试着写写看,出人意料的是原来PHP的数组函数用着如此方便,这么几行就搞定了,现在分享给大家,不足之处还望多多
指教
。
python递归
排列组合
_JavaScript递归生成
排列组合
[已解决]
博主做美团外卖回复评价想自动生成内容,遇到数组
排列组合
的递归
问题
。给出了数组示例,虽靠猜测解出
问题
,但无思路且写法非最优,希望大家指出
问题
及提升递归解题能力的练习方法。
排列组合
交叉组合 组合排列
算法
本文介绍了一种用于查询检索模块的交叉组合排列
算法
。通过实例展示了如何利用Java实现交叉组合查询,适用于不同组数及组内元素数量变化的情况,并提供了一个灵活的工具类。
java字符串
排列组合
_含有重复字符的字符串
排列组合
本文详细介绍了字符串的排列和组合
算法
,包括不含重复字符和含重复字符的情况。首先,阐述了排列和组合的基本概念,接着通过实例解释了如何从字符串中获取所有可能的组合和全排列。对于不含重复字符的组合,使用递归和栈实现;含重复字符的组合通过HashSet去重。最后,展示了全排列的实现,包括如何处理重复字符。文章提供了完整的Java代码实现,便于理解和实践。
图形处理/算法
19,466
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章