UVa 216 网络连线
来源:互联网 发布:修改歌曲信息软件 编辑:程序博客网 时间:2024/05/18 13:24
题意:给出一些电脑的二维坐标,连接两个电脑所用网线长为它们之间的直线距离再加上16 feet。要求把所有电脑连成一个串,怎样连,使得所用网线最短,并且按从一端到另一端的顺序输出连接的两个电脑间的距离。
思路:很容易想到的就是暴力枚举,将所有电脑做一个全排列,求得总长最小值的那个。这里用的递归枚举、即回溯法,进行了剪枝优化。
第一次交WA了,重读题目、看别人题解,都没找到原因。看到别人的freopen,才发现我交的里面freopen没注释掉~
Code:
#include<stdio.h>#include<math.h>void solve(int n,int *A,int cur,double dist);int comp[10][2];int A[10];//排列 double C[10];//相邻两点间距离 int bestA[10];double bestC[10];double bestdist;int main(){ //freopen("216.in","r",stdin); //freopen("216.out","w",stdout); int n; int num=1; while(scanf("%d",&n)==1 && n) { for(int i=0;i<n;++i) scanf("%d%d",&comp[i][0],&comp[i][1]); bestdist=1000000000; double dist=0; solve(n,A,0,dist); printf("**********************************************************\n"); printf("Network #%d\n",num++); for(int i=0;i<n-1;++i) printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.\n" ,comp[bestA[i]][0],comp[bestA[i]][1],comp[bestA[i+1]][0],comp[bestA[i+1]][1],bestC[i]); printf("Number of feet of cable required is %.2lf.\n",bestdist); } return 0;}void solve(int n,int *A,int cur,double dist){ if(cur==n && dist<bestdist) { bestdist=dist; for(int i=0;i<n-1;++i) { bestC[i]=C[i]; bestA[i]=A[i]; } bestA[n-1]=A[n-1]; } else for(int i=0;i<n;++i) { int ok=1; for(int j=0;j<cur;++j) if(A[j]==i) { ok=0; break; } if(ok) { A[cur]=i; if(cur) { int dx=comp[A[cur]][0]-comp[A[cur-1]][0]; int dy=comp[A[cur]][1]-comp[A[cur-1]][1]; double jl=16+sqrt(dx*dx+dy*dy); C[cur-1]=jl; dist=dist+jl; if(jl<bestdist && dist<bestdist) solve(n,A,cur+1,dist); dist=dist-jl;//不要忘了这里的恢复。对枚举的每个i来说,dist应该是相同的。每一次i过来时,改变了dist的值,枚举下一个i时,应该把dist恢复。 } else solve(n,A,cur+1,dist);//不要忘了这个 } }}
0 0
- UVA 216 网络连线
- UVa 216 网络连线
- 216UVA网络连线—回溯法
- 网络连线类型
- uva216-Getting in Line(网络连线)
- 游戏引擎剖析 (7) 网络和连线游戏环境
- 《连线》创始人畅谈网络:静态网页不会灭绝
- 网络布线基础:交叉线和直连线区别
- 关于S3C2440板子和电脑的网络连线
- altium designer 09 高亮同一网络的连线
- AD无原理图画pcb无网络连线设置
- 去掉 AD13 PCB网络连线中的双斜杠
- PADS布线问题(【同网络不能够连线】)
- Uva 563 网络流
- 游戏引擎基础(七)(网络和连线游戏环境)
- 连线游戏
- 硬连线
- 连线心得
- 调度器的使用
- 邻接表求有向图各顶点的入度和出度 (图论基础)
- hdu 3635 并查集
- AFNetWorking2.0 post 出现code=-1016错误怎么解决?
- 公司学习----JS获取URL传过来的值
- UVa 216 网络连线
- 3个收缩/展开/折叠的js代码
- Oracle判断是否闰年
- 异常处理与MiniDump详解(4) MiniDump
- Matlab中使用varargin来实现参数可变的函数
- c# .net 如何把byte类型仅仅转换成string而不改变其内容
- 关于大型网站技术演进的思考(一)--存储的瓶颈(1)
- iOS 根据文字动态计算控件的宽高
- 关于C程序生成随机数遇到的问题