用回溯法解决圆排列问题


教材是用的王晓东的《计算机算法设计与实现》第四版,c++版

一下是问题描述:

算法实现:

/**
*能确定一个正确的想法(即每种情况都能考虑到,然后找一个最简单而准确的方式表达出来)
*
**/ #include<iostream>//此问题没有要求相邻的圆必须相切


#include<math.h>
using namespace std;
class Circle{
 friend float CirclePerm(int,float*);//找到最优排列
 private:
  float Center(int t);//计算横坐标
  void Compute();//计算当前圆排列的长度
  void Backtrack(int t);
  float min,//最优值
  *x,//当前圆排列圆心横坐标
  *r; //当前元的半径
  int n;//当前待排园的个数
 
};
template <class T>
void Swap(T a,T b)
{
 T temp;
 temp = a;
 a = b;
 b = temp;
}
//此问题没有要求相邻的圆必须相切 ——对于计算横坐标,肯定选最大值
float Circle::Center(int t)//t代表当前选的第t个圆
{
 //计算当前所选园的圆心横坐标
 float temp = 0.0;//第一个圆默认为0

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值