#include<cmath> #include<iostream> #include<fstream> #include<string> #include<sstream> using namespace std; class City { private: string filename; int dimension; string comment; void cityGenerate(char* s); public: City(char* s){ cityGenerate(s); } double **city; enum dt{COORD_DISPLAY,NODISPLAY,TWOD_DISPLAY}displayType; enum ewt{EUC_2D,GEO,EXPLICIT,CEIL_2D,others}; enum ewf{LOWER_DIAG_ROW,UPPER_ROW,FULL_MATRIX,FUNCTION}; enum ewt edgeWeightType; enum ewf edgeWeightFormat; // ~City(){} string getFilename() {return filename;} void setFilename(string name) {filename=name;} int getDimension() {return dimension;} void setDimension(int d) {dimension=d;} enum ewt getewt() {return edgeWeightType;} void setewt(enum ewt ewtype) {edgeWeightType=ewtype;} enum ewf getewf() {return edgeWeightFormat;} void setewf(ewf ewformat) {edgeWeightFormat=ewformat;} string getComment() {return comment;} void setComment(string com) {comment=com;} void setDisplaytype(dt distype) {displayType=distype;} enum dt getDisplaytype() {return displayType;} template <class T> //T为点坐标的数据结构,可以为int或double inline double distance(T x1,T y1,T x2,T y2) { T tempx=x1-x2,tempy=y1-y2;//cout<<endl<<"tempx"<<tempx<<endl;cout<<endl<<"tempy"<<tempy<<endl; return sqrt(tempx*tempx+tempy*tempy); } void showCityMatrix(); void showUpperCityMatrix(); void showLowerCityMatrix(); // bool meetCriterion; }; void City::showCityMatrix() { cout<<"city matrix:"<<endl; for(int i=0;i<dimension;i++) { for(int j=0;j<dimension;j++) cout<<city[i][j]<<'\t'; cout<<endl; } } void City::showUpperCityMatrix() { cout<<"city upper matrix:"<<endl; for(int i=0;i<dimension;i++) { for(int j=i+1;j<dimension;j++) cout<<city[i][j]<<'\t'; cout<<endl; } } void City::showLowerCityMatrix() { cout<<"city Lower matrix:"<<endl; for(int i=0;i<dimension;i++) { for(int j=0;j<=i;j++) cout<<city[i][j]<<'\t'; } } //void City::cityGenerate(char* s,City city); void main() { City c("bays29.tsp"); return; } void City:: cityGenerate(char* s) { cout<<"TSP路径文件名:"<<s<<endl; cout<<"--------------------------------------------"<<endl; ifstream in(s); for(string line;getline(in,line);) { string content; int d=0; for(istringstream sin(line);sin>>content;) { if(content=="NAME:") { sin>>content; setFilename(content); } if(content=="COMMENT:") { string comment; while(sin>>content) { comment.append (content); comment.append(" "); } setComment(comment); // cout<<endl<<"评论:"<<city.getComment()<<endl; } if(content=="DIMENSION:") { sin>>d; setDimension(d); //城市矩阵初始化 city=new double*[d]; for(int i=0;i<d;i++) { city[i]=new double[d]; } } if(content=="EDGE_WEIGHT_TYPE:") { sin>>content; if(content=="EUC_2D") setewt(EUC_2D); else if(content=="GEO") setewt(GEO); else if(content=="EXPLICIT") setewt(EXPLICIT); else if(content=="CEIL_2D") setewt( CEIL_2D); else setewt(others); } if(content=="EDGE_WEIGHT_FORMAT:") { sin>>content; if(content=="LOWER_DIAG_ROW") setewf(LOWER_DIAG_ROW); else if(content=="UPPER_ROW") setewf(UPPER_ROW); else if(content=="FUNCTION") setewf(FUNCTION); else if(content=="FULL_MATRIX") setewf(City:: FULL_MATRIX); } if(content=="DISPLAY_DATA_TYPE:") { sin>>content; if(content=="COORD_DISPLAY") setDisplaytype(COORD_DISPLAY); else if(content=="TWOD_DISPLAY") setDisplaytype(TWOD_DISPLAY); else setDisplaytype(NODISPLAY); } //城市矩阵建立1 d=getDimension(); if(content=="NODE_COORD_SECTION") { double* x=new double[d],*y=new double[d]; for(int i=0;i<d;i++) { getline(in,line); istringstream inn(line); inn>>x[i]>>x[i]; inn>>y[i]; } for(i=0;i<d;i++) { for(int j=i;j<d;j++) { city[i][j]=distance(x[i],y[i],x[j],y[j]); city[j][i]=city[i][j]; } }/**/ }//城市矩阵建立1 else if(content=="EDGE_WEIGHT_SECTION") { if(getewf()==UPPER_ROW) { for(int i=0;i<d;i++) { getline(in,line); istringstream inn(line); city[i][i]=0; for(int j=i+1;j<d;j++) { double b; inn>>b; city[i][j]=b; city[j][i]=city[i][j]; } }//for } if(getewf()==LOWER_DIAG_ROW) { int i=0,j=0; while(getline(in,line)) { for(istringstream inn(line);inn>>city[i][j];) { city[j][i]=city[i][j]; j++; if(j>i) { i++; j=0; } } } } if(getewf()==FULL_MATRIX) { for(int i=0;i<d;i++) { getline(in,line); istringstream inn(line); for(int j=0;j<d;j++) { double b; inn>>b; city[i][j]=b; } }//for } } }//istringstream流分析 }//每行内容分析 in.close(); return; }/**/
【上篇】第 3 章 Beans, BeanFactory和ApplicationContext
【下篇】基本实体–弱化到下游实体上 ;;; 上游的关系变成map set可以控制值,变成List 也可以,可控性更高
【下篇】基本实体–弱化到下游实体上 ;;; 上游的关系变成map set可以控制值,变成List 也可以,可控性更高