TSPLIB数据文件的读取

首先将下载的文件解压缩(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,以上。 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值