用c++写一个贪心算法解决TSP问题
时间: 2024-06-03 22:10:31 浏览: 121
好的,关于TSP问题就是旅行商问题,要求在有n个城市的情况下,旅行商要走遍所有城市一次,且总路径最小。贪心算法是一种不断做出当前最优选择的算法,可以用来解决TSP问题。下面是用C语言实现TSP问题的贪心算法:
#include <stdio.h>
#define MAX_N 100 // 城市数最大值
#define INF 1e9 // 无穷大
int n; // 城市数
int d[MAX_N][MAX_N]; // 距离数组
int visited[MAX_N]; // 记录是否已经访问过
int tsp(int v)
{
int i, u, min, next;
visited[v] = 1; // 标记已经访问过
min = INF;
next = -1;
for(i = 0; i < n; i++)
{
if(!visited[i]) // 如果还没访问过
{
if(d[v][i] < min) // 找到距离最小的城市
{
min = d[v][i];
next = i;
}
}
}
if(next == -1) // 如果已经遍历完所有城市
{
next = 0; // 回到起点
min = d[v][next]; // 计算回到起点的距离
}
u = tsp(next); // 递归求解下一个城市
return min + u; // 返回总距离
}
int main(void)
{
int i, j, ans;
scanf("%d", &n);
for(i = 0; i < n; i++)
{
visited[i] = 0; // 初始化所有城市都没访问过
for(j = 0; j < n; j++)
{
scanf("%d", &d[i][j]); // 输入距离数组
}
}
ans = tsp(0); // 起点从城市0开始
printf("%d\n", ans); // 输出总距离
return 0;
}
注意:这只是TSP问题的一种简单实现方式,实际上还有很多其他的解法和优化方法。
阅读全文