UVA 216 Getting in Line
2013-07-20 20:35
495 查看
UVA 216 Getting in Line
深搜回溯,找出最短的路径。。搜索过程中保存下路径。最后输出。。其实也可以用全排列的next_permutation 暴力找出最短。。
#include <stdio.h> #include <string.h> #include <math.h> int n; double x[10], y[10]; int vis[10]; int lu[10]; int minlu[10]; int tt; double dd; void dfs(int num, double sum, int nn) { if (num == n) { if (dd > sum) { dd = sum; for (int i = 0; i < n; i ++) { minlu[i] = lu[i]; } } return; } for (int i = 0; i < n; i ++) { if (vis[i] == 0) { double d = sqrt((x[i] - x[nn]) * (x[i] - x[nn]) + (y[i] - y[nn]) * (y[i] - y[nn])) + 16; vis[i] = 1; lu[num] = i; dfs(num + 1, sum + d, i); lu[num] = -1; vis[i] = 0; } } } int main() { int tt = 1; while (scanf("%d", &n) != EOF && n) { dd = 1000000000; memset(vis, 0 ,sizeof(vis)); memset(x, 0, sizeof(x)); memset(y, 0, sizeof(y)); memset(lu, -1, sizeof(lu)); memset(minlu, 0, sizeof(minlu)); for (int i = 0; i < n ; i ++) { scanf("%lf%lf", &x[i], &y[i]); } for (int i = 0; i < n; i ++) { lu[0] = i; vis[i] = 1; dfs(1, 0, i); vis[i] = 0; lu[0] = -1; } printf("**********************************************************\n"); printf("Network #%d\n", tt ++); for (int i = 0; i < n - 1 ; i++) { double ddd; ddd = sqrt((x[minlu[i]] - x[minlu[i + 1]]) * (x[minlu[i]] - x[minlu[i + 1]]) + (y[minlu[i]] - y[minlu[i + 1]]) * (y[minlu[i]] - y[minlu[i + 1]])); printf("Cable requirement to connect (%d,%d) to (%d,%d) is %.2lf feet.\n", int(x[minlu[i]] + 0.5),int(y[minlu[i]] + 0.5),int(x[minlu[i + 1]] + 0.5),int (y[minlu[i + 1]] + 0.5), ddd + 16); } printf("Number of feet of cable required is %.2lf.\n", dd); } 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
- Getting in Line UVA, 216
- uva 216 - Getting in Line 带宽
- uva 216 Getting in Line(暴力枚举)
- UVa 216 - Getting in Line
- uva - 216 - Getting in Line
- uva216 Getting in Line
- UVA216 Getting in Line
- uva216 Getting in Line
- uva 216 Getting in Line
- uva 216 - Getting in Line
- UVa 216 Getting in Line