C语言穷举法解决旅行商问题
时间: 2024-05-10 16:10:38 浏览: 106
旅行商问题 C语言解法
4星 · 用户满意度95%
C语言中可以使用穷举法来解决旅行商问题。穷举法是一种暴力搜索的方法,它通过遍历所有可能的路径来找到最小成本的回路。
以下是一个使用穷举法解决旅行商问题的C语言代码示例:
```c
#include <stdio.h>
#include <limits.h>
#define N 4 // 城市数量
int graph[N][N] = { // 城市之间的距离矩阵
{0, 10, 15, 20},
{10, 0, 35, 25},
{15, 35, 0, 30},
{20, 25, 30, 0}
};
int visited[N]; // 记录城市是否被访问过
int minCost = INT_MAX; // 最小成本
void tsp(int currentCity, int visitedCities, int cost, int count) {
if (count == N && graph[currentCity][0] != 0) { // 所有城市都已经访问过且返回起始城市
cost += graph[currentCity][0]; // 加上返回起始城市的距离
if (cost < minCost) {
minCost = cost; // 更新最小成本
}
return;
}
for (int i = 0; i < N; i++) {
if (!visited[i] && graph[currentCity][i] != 0) { // 如果城市未被访问过且与当前城市相连
visited[i] = 1; // 标记城市为已访问
tsp(i, visitedCities + 1, cost + graph[currentCity][i], count + 1); // 递归访问下一个城市
visited[i] = 0; // 回溯,将城市标记为未访问
}
}
}
int main() {
visited[0] = 1; // 起始城市标记为已访问
tsp(0, 1, 0, 1); // 从起始城市开始递归搜索
printf("最小成本的回路路径成本为:%d\n", minCost);
return 0;
}
```
这段代码使用了一个邻接矩阵来表示城市之间的距离,通过递归的方式遍历所有可能的路径,并记录最小成本的回路路径成本。
阅读全文