您好,登錄后才能下訂單哦!
/* 理論是可以直接數組做的 然后呢現在復習呀…………………… 用小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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。