圆排序问题

  1. 问题
    给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给的3个圆的半径分别为1,1,2时,这3个圆的最小长度的圆排列如图所示。

  2. 解析
    设计算法:
    首先,需要一个函数来计算圆在当前圆排列中的横坐标,由l^2 sqrt((r1+r2)^ 2 - (r1-r2)^2),可推导出l = 2*sqrt(r1 *r2)。

设计一个递归算法,当节点大于n时,算法搜索至叶节点,即分配完全部的圆,得到新的圆排列方案,这时要计算当前圆排列的长度。如果比原来的更小则更新最小值。
若圆的数量还没有分配完,则接着选择下一个要排列的圆,然后继续递推下去。中间包含一个剪枝,如果加上新的圆后的长度大于最小值则直接跳过,搜下一个圆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值