街道最短路径问题
来源:互联网 发布:动态代理 java 编辑:程序博客网 时间:2024/04/29 02:59
描述:
一个街区有很多住户,街区的街道只能为东西、南北两种方向。住户只可以沿着街道行走。各个街道之间的间隔相等。用(x,y)来表示住户坐在的街区。例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。现在要建一个邮局,使得各个住户到邮局的距离之和最少。求现在这个邮局应该建在那个地方使得所有住户距离之和最小;
输入:
第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组第一行一个整数m<20,表示本组有m个住户,下面的m行每行有两个整数(0,100),表示某个用户所在街区的坐标.m行后是新一组的数据;
输出
每组数据输出到邮局最小的距离和,回车结束;
样例输入
2
3
1 1
2 1
1 2
5
2 9
5 20
11 9
1 1
1 20
样例输出
2
44
代码实现
/* * main.c * * Created on: 2015年9月12日 * Author: bobo */#include <stdio.h>#include <stdlib.h>#include <math.h>/* 交换两个数字 */void swap(float *a, float *b) { float temp = *a; *a = *b; *b = temp;}/* 最简单的排序 */void sort(int sum, float zuis[]) { int m, n; for (m = 0; m < sum - 1; m++) for (n = m + 1; n < sum; n++) if (zuis[n] > zuis[m]) swap(&zuis[m], &zuis[n]);}/* 测试输出 */void print(int sum, float zuis[]) { int m; for (m = 0; m < sum; m++) printf("%.1f ", zuis[m]); printf("\n");}int main() { /* 样例的个数 */ int size; scanf("%d", &size); while (size--) { /* 有几乎人家 */ int sum; /* 总长度 */ int length = 0; int i; scanf("%d", &sum); int xs[sum]; int ys[sum]; for (i = 0; i < sum; i++) scanf("%d%d", &xs[i], &ys[i]); /* 保存邮局的x和y */ int yx, yy; sort(sum, xs); sort(sum, ys); /* 中间的数值 */ int temp; if (sum % 2 == 0) { temp = sum / 2; yx = (xs[temp - 1] + xs[temp]) / 2; yy = (ys[temp - 1] + ys[temp]) / 2; } else { temp = (sum + 1) / 2; yx = xs[temp - 1]; yy = ys[temp - 1]; } for (i = 0; i < sum; i++) length += (abs(yx - xs[i]) + abs(yy - ys[i])); printf("%d\n", length); } return 0;}
运行结果:
思路整理
该题目主要是为了求取数的中位数.
2 0
- 街道最短路径问题
- 街道最短路径
- 街道最短路径
- nyoj7街道最短路径问题
- 南阳oj 街道最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 计算机三级易错点
- 图的遍历
- Terrain maps
- Ubuntu+VNC+KVM虚拟机安装部署说明文档
- Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程
- 街道最短路径问题
- Android 使用ShardSDK实现社会化分享
- Hadoop笔记十二之 java.io.IOException: expected org.apache.hadoop.io.LongWr
- UIScrollView添加自动布局
- 自学QT之进度条
- TCP粘包,UDP不存在粘包问题
- gcc编译器编译程序过程
- SOCKET网络通信
- 随手写了一个鸡肋的二叉树