首先将下载的文件解压缩(TSPLIB95数据集),将解压的文件与读取数据的代码放在同一文件夹下。
首先进行最优路径的读取,函数代码如下:(保存在best_path数组中,需提前定义)
void Read_opt_path(char a[])
{
a = strcat(a, ".opt.tour");
FILE* fp;
char str[100]; //暂存读取的字符串
int i0 = 1, j0 = 0; //i0控制从最优路径文件第几行读取,j0为最优路径赋值下标
int i = 1, j = 0, m = 0; //i控制从城市坐标文件第几行读取,j控制只读坐标值,不读城市编号,m为城市坐标赋值下标
fp = fopen(a, "r");
while (i0 < 6)
{
fgets(str, 255, fp);
i0++;
}
while (!feof(fp) && j0 < N)
{
fscanf(fp, "%s\n", str);
best_path[j0] = atoi(str);
j0++;
}
fclose(fp);
}
其次进行城市坐标的读取,函数代码如下:(保存在coordinate二维数组中,需提前定义)
void Read_Coordinate(char a[])
{
a = strcat(a, ".tsp");
FILE* fp;
char str[100]; //暂存读取的字符串
int i = 1, j = 0, m = 0; //i控制从城市坐标文件第几行读取,j控制只读坐标值,不读城市编号,m为城市坐标赋值下标
fp = fopen(a, "r");
while (i < 7)
{
fgets(str, 255, fp);
i++;
}
while (!feof(fp))
{
fscanf(fp, "%s\n", str);
if (j % 3 == 1) {
coordinate[m][0] = atoi(str);
}
else if (j % 3 == 2) {
coordinate[m][1] = atoi(str);
m++;
}
j++;
}
fclose(fp);
}
在进行函数调用时,需要注意相关变量的提前定义。例如,若读取att48的相关数据,只需调用Read_opt_path("att48")或Read_Coordinate("att48")即可读取相应数据。此外,上述两函数中所用到的头文件如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
另外,再附上一张TSPLIB上已公布的各问题最优解截图,以供参考:
博客中相关问题欢迎询问探讨,相互学习。QQ:1476154032,以上。