/*
理论是可以直接数组做的
然后呢现在复习呀…………………… 用小demo复习c++
下面的代码达到以下几点
1.N=9好理解 好展示
2.N为一个大数时,可以用于测
3.注意没有写入文件 可以直接用cmd 重定向exe 到txt
*/
//http://blog.csdn.net/yanxiaolx/article/details/51986428
//http://blog.csdn.net/yanxiaolx/article/details/51986428
#include<iostream>
#include<list>
#include<cmath>
#include <iomanip>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
const int N = 9;
double x[N] = {0,0,0,1,1,1,2,2,2};
double y[N] = {0,1,2,0,1,2,0,1,2};
double ds[N][N]= {0};
void Rand()
{
srand(time(0));
int n = 0;
while(n < N)
{
x[n] = rand()%100;
y[n] = rand()%100;
++n;
}
}
class Point
{
public:
Point(double x,double y,double ox,double oy)
:startx(x),starty(y),endx(ox),endy(oy)
{}
Point(const Point& point)
{
startx = point.startx;
starty = point.starty;
endx = point.endx;
endy = point.endy;
}
private:
double startx;
double starty;
double endx;
double endy;
friend ostream& operator<<(ostream &out,Point &point);
};
ostream& operator<<(ostream &out,Point &point)
{
out<<"("<<point.startx<<","<<point.starty<<")"<<" "
<<"("<<point.endx<<","<<point.endy<<")";
return out;
}
template<class _Ty>
class List
{
public:
List(){}
~List(){}
void add(const _Ty&point)
{
List_.push_back(point);
}
bool IsExist(double s)
{
it = List_.begin();
for(;it != List_.end();++it)
{
if(s == (*it).getdistence())
{
return true;
}
}
return false;
}
bool Insert(double s,Point point)
{
it = List_.begin();
for(;it != List_.end();++it)
{
if((*it).getdistence() == s)
{
(*it).add(point);
return true;
}
}
return false;
}
void disp()
{
it = List_.begin();
for(;it != List_.end();++it)
{
(*it).disp();
}
cout<<endl;
}
private:
list<_Ty> List_;
typename list<_Ty>::iterator it;
};
template<typename _Ty=Point>
class SList
{
public:
SList(double s=0):d(s){}
~SList(){}
void add(const _Ty&point)
{
slist.push_back(point);
}
double getdistence()
{
return d;
}
void disp()
{
it = slist.begin();
cout<<"距离:"<<d<<endl;
for(;it != slist.end();++it)
{
cout<<*it<<endl;
}
}
private:
double d;
list<_Ty> slist;
typename list<_Ty>::iterator it;
};
void calculate()
{
double d = 0;
for(int i=0;i < N;++i)
{
for(int j=i+1;j < N;++j)
{
d = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
ds[i][j] = d;
}
}
}
void show()
{
for(int i=0;i < N;++i)
{
for(int j=0;j < N;++j)
{
cout<<setw(6)<<ds[i][j]<<" ";
}
cout<<endl;
}
}
int main()
{
List<SList<Point> > List;
//Rand();
calculate();
show();
for(int i=0;i < N;++i)
{
for(int j=0;j < N;++j)
{
if(ds[i][j] != 0 )
{
if(!List.IsExist(ds[i][j]))
{
List.add(SList<Point>(ds[i][j]));
}
List.Insert(ds[i][j],Point(x[i],y[i],x[j],y[j]));
}
}
}
List.disp();
return 0;
}
/*
LINUX 下的测试 随机数需要添加
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。