如何使用不完整的图表实施蛮力旅行推销员
How to implement brute force travelling salesman with an incomplete graph?
我正在参加考试,我们将在未指向的,加权图上实现旅行推销员问题。以下是我们要解决的问题类型的示例:
示例1:https://www.autonomousrobotslab.com/uploads/5/8/4/4/4/4/4/58449511/cs302_final_preparation_treasure_hunter.pdf
示例2:https://www.autonomousrobotslab.com/uploads/5/8/4/4/4/4/4/58449511/cs302_final_preparation_tsp.pdf
但是,我看过的绝大多数视频/代码都以完整的图表来解决solve tsp,如以下示例:https://www.geeksforgeeks.org/traveling-salesman-problem-tsp-implementation/
我教授希望我们能够解决的两个示例都是不完整图的示例。是否可以对Geeksforgeeks的实现进行一些修改以解释不完整的图形?我想到简单地将零放在无法连接的顶点的邻接矩阵中,但是Geeksforgeeks上的代码假设所有顶点都连接到其他每个顶点,而在不完整的图中,则没有。我认为我需要某种方法来查找连接的所有顶点排列,而不是找到顶点的所有排列。
您可以使用next_permoint获取向量的所有排列。您迭代所有排列,计算成本并跟踪最低成本。以下是您的第二个示例实现。
int main(int argc, char** argv) {
const int NUM_NODES = 5;
int adjacencyMatrix[NUM_NODES][NUM_NODES] = {
{0, 10, 16, 12, 8},
{10, 0, 15, INT_MAX, 20},
{16, 15, 0, 10, INT_MAX},
{12, INT_MAX, 10, 0, 8},
{8, 20, INT_MAX, 8, 0}
};
int min;
int bestScore = INT_MAX;
int currentScore = 0;
vector<int> bestTrip;
vector<int> trip;
int legCost = 0;
//set a default trip
for (int i = 0; i < NUM_NODES; ++i) {
trip.insert(trip.end(), i);
}
//insert trip back home
trip.insert(trip.end(), 0);
while (next_permutation(trip.begin() + 1, trip.end() - 1)) {
currentScore = 0;
for (int i = 0; i < NUM_NODES; i++) {
legCost = adjacencyMatrix[trip[i]][trip[i + 1]];
if (legCost == INT_MAX || currentScore == INT_MAX) {
currentScore = INT_MAX;
} else {
currentScore += legCost;
}
}
if (currentScore < bestScore) {
bestScore = currentScore;
bestTrip = trip;
}
}
cout << "best trip: ";
for (int i = 0; i < NUM_NODES + 1; i++) {
cout << bestTrip[i];
}
cout << endl;
cout << "best score:" << bestScore << endl;
return 0;
}
相关文章:
- 我的C++语言蛮力算法有问题
- 动态规划中的旅行推销员问题
- 用蛮力解方程
- 蛮力任务的空输出
- 捕获雨水:蛮力方法中的错误
- 蛮力C 控制台屏幕输入
- 如何使用不完整的图表实施蛮力旅行推销员
- 为什么我的Cooley-Tukey和蛮力(傅立叶)算法给出的结果非常不同
- 我的基本蛮力计划遇到了麻烦.具体的类功能
- 蛮力背包的C 一部分
- 旅行推销员启发式
- 详尽的(蛮力)算法改进
- 面向旅行推销员的多片段启发式算法(C++)
- 为什么我的蛮力MD5黑客不起作用
- 如何在没有蛮力的情况下找到矩阵中元素的计数?我们能做到吗?
- 蛮力置换交换
- c++蛮力程序很慢
- 一个特定的旅行推销员变体的实现
- 蛮力攻击项目
- 最大子数组蛮力法对第一个数组产生较大的总和