我编写了一个解析器来计算坐标文件(数字,x,y)之外的距离矩阵。
该文件如下所示:
1 41 49
2 35 17
3 55 45
4 55 20
每一行代表一个城市,其坐标为(x,y)。
这是解析器。 countLines()函数只接受一个文件并返回行数。
void parseCoords(string file){
ifstream tspCoordFile;
ifstream tspCoordFile2;
tspCoordFile.open(file.c_str());
tspCoordFile2.open(file.c_str());
// test file
if(tspCoordFile.fail()){
cerr << "Error reading file!" << endl;;
exit(1);
}
// create variables and matrix
int k=0,k2=0;
float x, y, x2, y2;
float** matrix = new float*[countLines(file)];
for(int i = 0; i < countLines(file); ++i)
matrix[i] = new float[countLines(file)];
while(!tspCoordFile.eof()){
tspCoordFile >> k >> x >> y;
while(!tspCoordFile2.eof() ){
tspCoordFile2 >> k2 >> x2 >> y2;
// calculate distance
matrix[k][k2]= sqrt(pow(x2-x,2) + pow(y2-y,2));
cout << matrix[k][k2] << " ";
}
cout << " rownumber " << k <<endl;
tspCoordFile2.clear();
tspCoordFile2.seekg(0,std::ios::beg);
}
}
我遇到的问题是:除非我在坐标文件中添加一个额外的空行,否则我的程序会在正确打印3/4矩阵后崩溃。当我添加这个额外的行时,它确实打印出整个矩阵,但它显然也计算了一个额外的值,通过使用空行作为全0,每行和最后一行。
提前致谢。