Problem E: 质心算法
来源:互联网 发布:2017年网络电视剧 编辑:程序博客网 时间:2024/06/07 18:47
Problem E: 质心算法
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1767 Solved: 797
[Submit][Status][Web Board]
Description
在很多应用中,需要对某个目标进行定位。比如对于一个未知坐标的点A,假定已知A点与N个点相邻,且已知N个相邻点的坐标,则可取N个点的质心作为A点坐标的一个估计值。
所谓质心,就是指其横坐标、纵坐标分别为N个点的横坐标平均值、纵坐标平均值的点。即:假定N个点的坐标分别(x1,y1),(x2,y2),......,则质心的坐标为((x1+x2+...)/N, (y1+y2+...)/N)。
现在需要你编写2个类:
1. Point类:包括一个点的横坐标和纵坐标,并提供适当的构造函数、析构函数和拷贝构造函数,以及getX()和getY()方法。
2. Graph类
(1)数据成员Point *points;表示与A点相邻的点的集合。
(2)数据成员:int numOfPoints;表示相邻点的个数。
(3)适当的构造函数、析构函数。
(4)Point getCentroid()方法:用于返回质心点。
注意:同一类的对象之间的赋值运算(=)不调用拷贝构造函数。
Input
输入为多行,第一行M>0表示有M个测试用例。
每个测试用例包含多行。第一行N>0表示有N个点,之后是N个点的横坐标和纵坐标,每个点占一行。
Output
见样例。
Sample Input
Sample Output
HINT
当使用对象作为函数返回值时,会产生一个临时对象,此时会调用拷贝构造函数。但是在g++编译器(也就是大家常用的code::blocks所用的编译器)中,当函数返回的对象给另一个对象进行赋值时,如果函数返回值是一个局部变量,则不会调用拷贝构造函数。所以,如果想在此程序中实现拷贝构造函数的调用,必须在getCentroid中返回一个使用new运算符创建的对象,而不是一个已经定义的局部对象。
Append Code
한국어< 中文 فارسی English ไทย
All Copyright Reserved 2010-2011 SDUSTOJ TEAM
GPL2.0 2003-2011HUSTOJ Project TEAM
Anything about the Problems, Please Contact Admin:admin
#include<cstdio>#include<iostream>#include<iomanip>using namespace std;class Point{ private : double x,y; public : Point(const Point & p){ x = p.x; y = p.y; cout << setiosflags(ios::fixed) << setprecision(2) <<"A Point ("<<x<<", "<<y<<") is copied!"<<endl; } Point():x(0),y(0){ cout << setiosflags(ios::fixed) << setprecision(2) <<"The Point ("<<x<<", "<<y<<") is created!"<<endl; } Point(double a,double b):x(a),y(b){ cout << setiosflags(ios::fixed) << setprecision(2) <<"The Point ("<<x<<", "<<y<<") is created!"<<endl; } ~Point(){ cout << setiosflags(ios::fixed) << setprecision(2) <<"A Point ("<<x<<", "<<y<<") is erased!"<<endl; } double getX() {return x;}; double getY() {return y;}; void setX(double a) { x = a;} void setY(double b) { y = b;} };class Graph{ private : Point *point; int numOfPoints; public : Graph(Point *p,int k):numOfPoints(k){ point = new Point[k]; for (int i = 0 ; i < k ; i++){ point[i].setX(p[i].getX()); point[i].setY(p[i].getY()); } cout << "A graph with "<<k<<" points is created!"<<endl; } ~Graph(){ delete []point; cout << "A graph with "<<numOfPoints<<" points is erased!"<<endl; } Point getCentroid(){ double xx = 0,yy = 0; for (int i = 0; i < numOfPoints ; i++){ xx += point[i].getX(); yy += point[i].getY(); } Point *p = new Point(xx/numOfPoints,yy/numOfPoints); return *p; } };int main(){ int cases,num; double x, y; Point centroid; cin>>cases; for (int i = 0; i < cases; i++) { cin>>num; Point points[num]; for (int j = 0; j < num; j++) { cin>>x>>y; points[j] = *(new Point(x, y)); } Graph graph(points, num); centroid = graph.getCentroid(); cout<<setprecision(2)<<fixed<<"The centroid is ("<<centroid.getX()<<", "<<centroid.getY()<<")."<<endl; } return 0;}
- Problem E: 质心算法
- Problem F: 质心算法
- Problem C: 质心算法
- Problem D: 质心算法
- Problem D: 质心算法
- 贪心算法—Problem E
- 贪心算法 Problem E 1004
- 图算法—Problem E
- 质心
- 贪心算法problem E(编号1004)
- 基于质心的聚类算法
- 【matlab】:matlab求图像质心算法
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem E
- Problem D: 我们来做个Student类吧!
- 使用对象进行分页显示
- Hbase架构概述
- Wireshark抓包系列教程之二:HTTP协议分析
- Apache Tomcat、Tomcat、Apache
- Problem E: 质心算法
- 关于机器学习的几个优秀教程
- 自动生成图像标签代码
- Pycharm快捷键
- hive常用命令整理
- Struts2之拦截器篇
- POJ 1036 Gangsters 笔记
- 漫谈程序员系列:无BUG不生活
- 聊聊架构(3)