算法分析与设计 大作业 圆排列问题

这篇博客探讨了如何解决圆排列问题,即给定大小不等的n个圆,寻找使圆排列长度最小的排列方式。作者采用回溯算法进行求解,详细解析了算法思路,并指出在最坏情况下算法的时间复杂度为O((n+1)!). 源代码可在GitHub上查看。
摘要由CSDN通过智能技术生成

1. 问题

给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切,从这n个圆的所有排列中找出有最小长度的圆排列。

2. 解析

使用回溯算法求解。圆排列问题的解空间是一棵排列树,按照回溯法搜索排列树的算法框架,设开始时a=[r1,r2,……rn]是所给的n个元的半径,则相应的排列树由a[1:n]的所有排列构成。

在回溯过程中,当i>n时,算法搜索至叶节点,得到新的圆排列方案,计算当前圆排列的长度,适时更新当前最优值;当i<n时,当前扩展节点位于排列树的i-1层,此时选择下一个要排列的圆,并计算相应的下界函数。

3. 设计

void Backtrack(int i) {
   
	if (i > n) {
   
		计算当前圆排列长度;
	
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值