/* 理论是可以直接数组做的 然后呢现在复习呀…………………… 用小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 下的测试 随机数需要添加
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。