分享
 
 
 

一个有趣的问题,如何取出无重复组合对!

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

这是我在论坛上回的一个帖子,感觉很有意思就在这里保存下来,以免丢失!

原贴地址:http://community.csdn.net/Expert/topic/3964/3964967.xml?temp=.7246057

提问(我稍加更改):

做一函数,比如

向函数传入一个6函数计算出5行,

每二个一对,一行3对,一行中必须出现{1,2,3,4,5,6};

两行中不能有相同的一对!

向函数传入一个 12 则输出11行等等...

//例:如6则输出这样内容,每组必须无重复

//则函数计算出5行,每行3对,2个一对,无重复的组合

1-2,3-4,5-6

2-4,3-5,1-6

3-2,4-6,1-5

4-5,3-1,2-6

5-2,1-4,3-6

我的解答:

给搂主一个提议:这是我精心为你设计的一个算法,如果有什么不对的地方,给我发消息!

具体算法步骤:

输入num(偶数)时,

用(x,y)模式表示x-y

弄一个邻居表TA,如下是(1,2,3,4,…,i,i+1,…num)的所有二位组合:

p1----> (1,2),(1,3),(1,4)…,(1, num)

p2----> (2,3),(2,4)…(2, num)

p3----> (3,4),…,(3, num)

pi---->(i,i+1),…,(i,num)

p(num-1)----> (num-1,num)

寻找一组的步骤如下:

初始化:定义集合SA,用来存储已经被包含的x,y,初始化SA={},

注意:未处理(x1,y1):表示(x1,y1)没有被尝试地包含在SA中,所谓尝试,是因为即使被包含进去,也可能被回滚掉!

第1步,取p1中第一个未处理(1,y1),SA ={1,y1};

第2步,如果2在SA中,进入第3步,

否则如果p2存在未处理(2,y2),取p2中第一个未处理(2,y2),SA =SA+{2,y2};

否则如果p2不存在未处理(2,y2),去掉最后加入SA的两个数,然后返回到最后加入元素到SA的那一步;

第3步,如果3在SA中,进入第4步,

否则如果p3存在未处理(3,y3),取p3中第一个未处理(3,y3),SA =SA+{3,y3};

否则如果p3不存在未处理(3,y3),去掉最后加入SA的两个数,然后返回到最后加入元素到SA的那一步;

第i步,如果i在SA中,进入第i+1步,

否则如果pi存在未处理(i,yi),取pi中第一个未处理(i,yi),SA =SA+{i,yi};

否则如果pi不存在未处理(i,yi),去掉最后加入SA的两个数,然后返回到最后加入元素到SA的那一步;

第num-1步,如果num-1在SA中,进入第num步,

否则如果p(num-1)存在未处理((num-1),y(num-1)),取p(num-1)中第一个未处理((num-1),y(num-1)),SA =SA+{(num-1),y(num-1)};

否则如果p(num-1)不存在未处理((num-1),y(num-1)),去掉最后加入SA的两个数,然后返回到最后加入元素到SA的那一步;

第num步,如果SA还未全包括{1,2,3,4, …,i,i+1,…num},去掉最后加入SA的两个数,然后返回到最后加入元素到SA的那一步;

否则,假设SA={x1,y1,x2,y2,…},则从邻居表中删除(x1,y1),(x2,y2),…;然后到初始化重新开始寻找下一组,直到邻居表中没有元素!

再给你一个例子:

当为6时,

邻居表,

p1----> (1,2),(1,3),(1,4),(1,5),(1,6)

p2----> (2,3),(2,4),(2,5),(2,6)

p3----> (3,4),(3,5),(3,6)

p4----> (4,5),(4,6)

p5----> (5,6)

找第1组过程:

第1步,p1取(1,2),SA={1,2};

第2步, 2在SA中,转下一步;

第3步,p3取 (3,4),SA={1,2,3,4};

第4步,4在SA中,转下一步;

第5步,p5取 (5,6),SA={1,2,3,4,5,6};

第6步,得到第一组(1,2),(3,4),(5,6),

从邻居表中删除(1,2),(3,4),(5,6),邻居表变为

p1----> (1,3),(1,4),(1,5),(1,6)

p2----> (2,3),(2,4),(2,5),(2,6)

p3----> (3,5),(3,6)

p4----> (4,5),(4,6)

找第2组过程:

第1步,p1取(1,3),SA={1,3};

第2步, p2取 (2,4),SA={1,3,2,4};

第3步,3在SA中,转下一步;

第4步,4在SA中,转下一步;

第5步,p5不存在未处理(5,y5),去掉最后加入SA的两个数,SA={1,3};然后返回到最后加入元素到SA的第2步,

第2步, p2取 (2,5),SA={1,3,2,5};

第3步,3在SA中,转下一步;

第4步,p2取 (4,6), SA={1,3,2,5,4,6};

第5步,5在SA中,转下一步

第6步,得到第二组(1,3),(2,5),(4,6),

从邻居表中删除(1,3),(2,5),(4,6),邻居表变为

p1----> (1,4),(1,5),(1,6)

p2----> (2,3),(2,4)(2,6)

p3----> (3,5),(3,6)

p4----> (4,5)

找第3组过程:

找第4组过程:

找第5组过程:

p1----> (1,6)

p2----> (2,3)

p3---->

p4----> (4,5)

可以找到5组为

(1,2),(3,4),(5,6)

(1,3),(2,5),(4,6)

(1,4),(2,6),(3,5)

(1,5),(2,4),(3,6)

(1,6),(2,3),(4,5)

结果正确吧?

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有