社区
图形处理/算法
帖子详情
有关排列组合的算法问题,请指教!
common_man
2003-05-08 03:43:17
我的程序要实现这样的功能:
有一个有N个结点的链表,每次从中复制m(m<N)个不同的结点,组成一个新的小链表,直到取出所有组合为止,比如说,对于有4个结点的链表,每次取两个结点,则要生成6个长度为2的小链表。
这个算法该怎么构思,请哪位大侠给一点指点,多谢了!
...全文
42
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
c(m,n)
算法
关于C(m,n)
算法
的代码,自己写的,和大家分享,希望大家能多多
指教
排列组合
交叉组合 组合排列
算法
20180619一,交叉组合排列
算法
:1、前言:在项目开发的过程中负责全系统查询检索的一个模块,其中有一个查询方式叫做“交叉组合查询”,与数学中的
排列组合
类似,因此就开始想看一下这个该怎么写,以下为本人原创文章,转载
请
标明出处:https://blog.csdn.net/RobinsStruggle,本人自定为java菜鸟,如有
问题
指出
请
指教
,不胜感激!2、模型(例题):现有A、B、C三组球,每组...
程序员必备
算法
课!(揭秘淘宝购物车
算法
)
双十一,双十二,你是否也在购物车中放置了很多商品?当面对购物车中不同商家、不同价格、不同质量和服务的商品时,如何在有限的预算下,选择到让你最满意的商品,本次公开课主要从以下几方面进行讲解:首先讲解如何将购物车选择商品
问题
转进行量化指标度量,转化为计算机可以求解的
算法
问题
;其次结合实例讲解实际
问题
如何利用
算法
求解;最后基于Python语言如何设计
算法
并在计算机上进行实现。
python
排列组合
算法
_Python 进阶之递归(二)
排列组合
大家好,我是一只初入编程坑的生物狗。在学习python的过程中整理了一下自己的资料分享给大家,同是小白的朋友们可以拿来练习,提升自信(如果我这只笨笨的生物狗都可以编代码的话你萌也木
问题
的!)肯定有很多不足的地方,也麻烦大家指出好帮助我进步!记得教授用递归演示
排列组合
时,对着code连发三声感叹:"Beautiful!" "Amazing!" "Elegant!"我也很激动啊,只是当我尝试自己写的时...
java递归
算法
中的
排列组合
问题
及
排列组合
去重
之前学习递归
算法
的时候一直来不及总结一下,也花了一些时间去理解
排列组合
中的实现
问题
,现在总结一下,希望对大家能有帮助 1. 排列
问题
问题
:由a、b、c三个字母随机组成的所有排列情况 思路:首先 先确定第一位字母,例如确定了a,则情况就变成了a与剩下两位字母的随机组合,这里就是递归实现,自身实现自身方法。当列出了所以以a为启示的情况后,a与b交换 ,交换后仍然是递归方法。之后a与c进行交换。
图形处理/算法
19,469
社区成员
50,697
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章