uva 216 Getting in Line
来源:互联网 发布:网站登录的数据流程图 编辑:程序博客网 时间:2024/05/21 10:58
递归枚举应用,递归枚举所有可能出现的序列,在递归里面取最优的一组就行了,注意当当前的总长已经超过最小的总长的时候递归就可以回溯了。
#include <stdio.h>#include <math.h>#include <string.h>#include <float.h>struct pos{double x;double y;};struct pos all_pos[10];struct pos serial[10];struct pos min_serial[10];unsigned char visited[10];double min_dis;double get_dis(const struct pos &p1, const struct pos &p2){return sqrt(pow(p1.x-p2.x,2.0)+pow(p1.y-p2.y,2.0));}void dfs(int len, int cur, double cur_dis){int i, j;double dis;if(cur == len+1){if(cur_dis < min_dis){min_dis = cur_dis;for(i=1; i<=len; i++){min_serial[i].x = serial[i].x;min_serial[i].y = serial[i].y;}}}if(cur == 1){for(i=1; i<=len; i++){serial[cur].x = all_pos[i].x;serial[cur].y = all_pos[i].y;visited[i] = 1;dfs(len, cur+1, cur_dis);visited[i] = 0;}}else{for(i=1; i<=len; i++){if(!visited[i]){serial[cur].x = all_pos[i].x;serial[cur].y = all_pos[i].y;visited[i] = 1;dis = get_dis(serial[cur], serial[cur-1]);if(cur_dis+dis<min_dis)dfs(len, cur+1, cur_dis+dis);visited[i] = 0;}}}}void func(int n){int i;memset((void*)visited, 0, sizeof(unsigned char)*10);min_dis = DBL_MAX;dfs(n, 1, 0.0);for(i=2; i<=n; i++){printf("Cable requirement to connect (%.0lf,%.0lf) to (%.0lf,%.0lf) is %.2lf feet.\n", min_serial[i-1].x,min_serial[i-1].y,min_serial[i].x,min_serial[i].y,get_dis(min_serial[i-1], min_serial[i])+16);}printf("Number of feet of cable required is %.2lf.\n", min_dis+16*(n-1));}int main(void){int n;int i;int case_count;//freopen("input.dat", "r", stdin);case_count = 0;while(scanf("%d", &n)){if(!n)break;for(i=1; i<=n; i++)scanf("%lf %lf", &(all_pos[i].x), &(all_pos[i].y));case_count ++;printf("**********************************************************\n");printf("Network #%d\n", case_count);func(n);}return 0;}
- UVa 216 Getting in Line
- Uva 216 Getting in Line
- uva 216 - Getting in Line
- uva 216 - Getting in Line
- UVa 216 - Getting in Line
- uva-216 - Getting in Line
- Uva 216 - Getting in Line
- uva 216 - Getting in Line
- UVa 216 - Getting in Line
- uva 216 Getting in Line
- UVA 216 - Getting in Line
- UVA 216 Getting in Line
- UVA 216 Getting in Line
- UVa 216 Getting in Line
- UVA 216 - Getting in Line
- uva 216 Getting in Line
- uva - 216 - Getting in Line
- uva 216 - Getting in Line
- 开通博客第一天
- windows 8 分区(分盘)
- 总结过去,为未来加油!
- Golden Huffman 编码学习
- uncompressing linux.....done,booting the kernel
- uva 216 Getting in Line
- zeromq and jzmq
- webwiew的使用Service入门指南
- solaris下vnc的cde、jdk窗口配置
- 设计模式:装饰者模式(3)C++版
- 详细解析Java中抽象类和接口的区别
- 微策略MicroStrategy校园招聘笔试题2013.10.16杭州
- (int)a、&a、(int)&a、(int&)a区别
- UVa 190 Circle Through Three Points (求不共线三点所确定的圆的方程)