我正在尝试使用优先级队列来实现Dijkstra,但我不断遇到此分段错误。
我的实现如下:
void dijkstra_pq_routine(Graph &g, int s, vector<int> &prio,vector<int> &pred)
{
std::cout << "init" << std::endl;
int n = g.size();
prio.assign(n,INT_MAX);
prio[s] = 0;
pred.assign(n,-1);
priority_queue<pii,vector<pii>, greater<pii> > q;
q.push(make_pair(0,s));
while(!q.empty())
{
std::cout << "while" << std::endl;
int d = q.top().first;
int u = q.top().second;
q.pop();
if(d != prio[u])
{
std::cout << "if" << std::endl;
//continue;
}
std::cout << "before for" << std::endl;
for(int i = 0;i < (int) g[u].size(); i++)
{
std::cout << "for" << std::endl;
int v = g[u][i].first;
int nprio = prio[u] + g[u][i].second;
if(prio[v] > nprio)
{
prio[v] = nprio;
pred[v] = u;
q.push(make_pair(nprio,v));
}
}
}
//int len = returnPathLength(prio,(int)g.size()-1);
//return len;
}
我使用的图表如下所示:
typedef pair<int, int> pii;
typedef vector<vector<pii> > Graph;
这会产生错误:
int main()
{
Graph g(2);
g[0].push_back(make_pair(1, 3));
g[0].push_back(make_pair(1, 1));
dijkstra_pq(g);
}
似乎分段错误发生在For循环之前。 我希望有人可以帮助我。
提前致谢!