C++中TSP的动态编程解决方案
Dynamic Programming Solution for TSP in C++
我一直在尝试在C++中为 TSP(旅行销售员问题(实现动态规划解决方案。我的代码可以编译,但是当我尝试运行目标文件时,程序停止工作,我被迫关闭它。
这是代码:
int tsp(std::vector<std::vector<int>> matrix) {
int n = matrix[0].size();
std::vector<std::vector<int>> A; // Vertex, Set-Size
std::set<int> S;
for(int i = 0; i < n; ++i) {
S.insert(i);
}
for(int i = 0; i < n; i++) {
if(S.size() == 2) {
A[i][2] = matrix[1][i];
}
else if(S.size() > 2) {
std::set<int>::iterator it;
for(it = S.begin(); it != S.end(); ++it) {
int s = S.size();
S.erase(i);
int sd = S.size();
int k = *it;
if((k != i) && (k != 1) && (A[i][s] > (matrix[k][i] + A[k][sd]))) {
A[i][s] = matrix[k][i] + A[k][sd];
}
}
}
}
return A[1][n];
}
有人可以指出我犯了什么错误吗?
在调用std::vector
之前,您需要填充operator[int]
或调整其大小。向量基本上是一个保持其大小的数组。因此,任何越界访问都会导致运行时出现分段错误(如果幸运的话(或损坏您的内存。
,因此您需要遍历两个范围并正确填充(或调整(向量:
std::vector<std::vector<int>> A; // Vertex, Set-Size
for(int i=size; i>0; --i)
A.push_back(std::vector<int>);
for(int i=size; i>0; --i)
for(int j=size; j>0; --j)
A[i][j] = 0;
甚至更好:
A.resize(size);
for(auto& v : a) // (since you already have c++11)
v.resize(size, val); // fill with val
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- C++中TSP的动态编程解决方案
- 迭代解决方案作为动态编程
- 如何验证竞争性编程任务的动态编程解决方案的正确性
- 竞争性编程:解决方案运行速度太慢
- ::createFile winApi 失败,出现错误 5 (access_denied).是外壳编程或其他解决方案或任
- 用于编程练习(管件)的回溯解决方案
- 递归解决方案的动态编程解决方案
- 使用动态编程进行更改的所有解决方案
- 有效测试多个学生的编程解决方案