【发布时间】:2015-08-18 05:28:11
【问题描述】:
我正在尝试学习 Dijkstra 算法,但代码给了我分段错误。我不明白为什么这段代码会给我分段错误。
我想用类和向量来实现这个算法,所以这是我的代码方法,我从g4g得到算法伪代码。
这是给出分段错误的行,下面代码中的 if 语句。
if(!sptset[v] && adj[u][v] && dist[u] != INT_MAX
&& dist[u] + adj[u][v] < dist[v])
这是成员函数
void Graph::Dijkstra(int src) {
int dist[V];
bool sptset[V];
for (int i = 0; i < V; i++)
dist[i] = INT_MAX, sptset[i] = false;
dist[src] = 0;
//find shortest path for all vertices
for (int count = 0; count < V - 1; count++) {
int u = MinDistance(dist, sptset);
sptset[u] = true;
//update dist value of the ajacent vertices
for (int v = 0; v < V; v++) {
if (!sptset[v] && adj[u][v] && dist[u] != INT_MAX
&& dist[u] + adj[u][v] < dist[v])
dist[v] = dist[u] + adj[u][v];
}
}
}
类图声明如下
class Graph(){
int V;
vector<int> *adj;
};
如果有人想看,这里是完整的代码。 Ideone 请帮助我理解为什么会出现这个错误。错误在哪里,我没有让代码工作。
** 编辑答案。 **
这是我在代码中出错的地方。 adj 是向量并且大小可变,我认为它像一个数组,所以我循环它直到 V 应该更改为 adj[u].size() 以便它只循环通过它。感谢您的帮助
for (int v = 0; v < adj[u].size(); v++) {
if (!sptset[v] && adj[u][v] && dist[u] != INT_MAX
&& dist[u] + adj[u][v] < dist[v])
dist[v] = dist[u] + adj[u][v];
}
【问题讨论】:
标签: c++ algorithm data-structures dijkstra