#include<iostream>
#include<math.h>
using namespace std;
class Circle
{public:float Center(int t);void Compute(void );void BackTrack(int t);float min;    //当前最优值 float *x;       //当前圆排列圆心横坐标        float *r;       //当前圆排列 float *result;  //记录最终 的圆半径排序 int n;            //待排列圆的个数
};
float Circle::Center(int t)//计算当前所选圆的圆心横坐标
{float temp = 0;//记录临时的圆心的横坐标for(int j=1;j<t;j++){float valuex = x[j]+2.0*sqrt(r[t]*r[j]);//算一下前面所有的圆心到目前第T个圆的圆心的距离 //因为可能这里有陷阱 if(valuex > temp)temp = valuex; } return temp;} void Circle::Compute(void)//计算当前圆排列的长度 {float low = 0,high = 0;for(int i=1;i<=n;i++){if(x[i]-r[i]<low)low = x[i] - r[i];if(x[i]+r[i]>high)high = x[i] + r[i];}if(high-low<min)min = high - low;}
void Circle::BackTrack(int t)
{if(t>n){Compute();}else{for(int j=t;j<=n;j++){swap(r[t],r[j]);float centerx = Center(t);if(centerx+r[t]+r[1]<min){result[j]=r[t];x[t] = centerx;BackTrack(t+1);}swap(r[t],r[j]);} }
}
float CirclePerm(int n,float *a)
{Circle X;X.n =n;X.r =a;X.min = 100000;float *x =new float [n+1];X.x= x;float *result = new float [n+1]; X.result= result;X.BackTrack(1);cout<<"输出圆排列后圆半径的序列:";for(int i=1;i<=n;i++){cout<<X.result[i]<<" ";}cout<<endl;delete[] x;return X.min;
}
int main()
{int n;cout<<"输入圆的个数:";cin>>n; cout<<"输入圆半径序列:";float a[n+1];for(int i=1;i<=n;i++){cin>>a[i];}cout<<CirclePerm(n,a);
}

算法设计与分析——回溯法——圆排列问题相关推荐

  1. 算法设计与分析——回溯法——批处理作业调度

    问题描述:给定n个作业的集合{J1,J2,-,Jn}.每个作业必须先由机器1处理,然后由机器2处理.作业Ji需要机器j的处理时间为tji.对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时 ...

  2. 算法设计与分析-回溯法

    单选题 关于回溯法以下叙述中不正确的是( ). A. 回溯法有"通用解题法"之称,它可以系统地搜索一个问题的所有解或任意解 B. 回溯法是一种既带系统性又带跳跃性的搜索算法 C. ...

  3. 算法设计与分析——回溯法——装载问题

    0027算法笔记--[回溯法]回溯法与装载问题 自己写的代码: #include <iostream> using namespace std; template <class Ty ...

  4. 算法设计与分析——回溯法——n皇后问题

    一.什么是N皇后问题? 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于再n×n的棋盘上放置n个皇后,任何2个皇后 ...

  5. 算法设计与分析——回溯法——旅行售货员问题

    #include<iostream> #include<bits/stdc++.h> using namespace std; const int noEdge=65535; ...

  6. 算法设计与分析——回溯法——符号三角形问题

    #include<iostream> using namespace std;class Triangle{public:void Backtrack(int t);int n;//第一行 ...

  7. 16回溯法——圆排列问题

    16基于回溯法的圆排列问题 目录 16基于回溯法的圆排列问题 1. 问题 2. 解析 举个栗子 3. 设计 4. 分析 5. 源码 1. 问题 圆排列问题:给定n个圆的半径序列,将它们放到矩形框中,各 ...

  8. 算法设计与分析第5章 回溯法(二)【回溯法应用】

    第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...

  9. 0x08算法设计与分析复习(二):算法设计策略-回溯法2

    参考书籍:算法设计与分析--C++语言描述(第二版) 算法设计策略-回溯法 子集和数 问题描述 已知n个不同的正数wi(0≤i≤n−1)的集合,求该集合的所有满足条件的子集,使得每个子集中的正数之和等 ...

最新文章

  1. 还在为论文发愁?ACL组委会手把手教你论文投稿小技巧 | ACL 2017
  2. 英飞凌单片机TC264实战攻略
  3. python计算出nan_python如何进行汇总统计?
  4. 写给大数据开发初学者的话 | 附教程
  5. WordPress+Markdown+为知笔记,实现高质量笔记和博客
  6. JDBC防止SQL注入
  7. 行测中图形推理题的规律
  8. 东华理工大学arm试卷_《arm体系结构》期末考试试卷 含等答案.doc
  9. 查歌词php,php krc歌词解析
  10. 听写英语单词的小程序
  11. 折腾黑苹果——重装10.10.3 传统BIOS+MBR+变色龙 引导方案
  12. CSC与Roslyn编译
  13. Android 直播调研
  14. import sys
  15. swift获取openuuid_iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P
  16. C++——m个月饼分给n个人
  17. 解决 docker 磁盘空间不足问题
  18. Bing Test -必应每日壁纸自动换
  19. iCamera App Kit 使用说明
  20. uni-app实现验证码登录-云之讯

热门文章

  1. 分布式一致性算法:Raft 算法
  2. 微软想让你跟机器人说句话就把事办了
  3. 3分钟看完Build2016 Day 1 Keynote
  4. qiaoye.php,全自动无限生成关键词页面(黑帽SEO优化终极方法)
  5. 手把手教你启用Win10的Linux子系统 Ubuntu
  6. ENVI修复图像坏点扩展补丁
  7. 谷歌浏览器之如何快速找到js、css等文件
  8. C语言之malloc和free总结
  9. linux之写C代码出现warning: format not a string literal and no format arguments [-Wformat-security]
  10. 工业相机和普通相机的区别详解_数码单反相机和胶片单反相机的区别