C++ 具有优先级队列的Dijkstra,分段错误
我试图用优先级队列实现Dijkstra,但我一直遇到这种分段错误 我的实现如下所示:C++ 具有优先级队列的Dijkstra,分段错误,c++,segmentation-fault,C++,Segmentation Fault,我试图用优先级队列实现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); pr
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;
似乎分段错误发生在For循环之前。
我希望有人能帮助我
提前谢谢 你试过调试吗?什么是dijkstra_pq()?只是我在初始化prio和predif(d!=prio[u])的例程之前调用的一个函数,你确定你没有越界吗?@swang是的。如果我能找到u和prio.size(),结果是:-prio.size():2u:0prio[u]:0-prio.size():2u:1prio[u]:1-prio.size():2u:1
int main()
{
Graph g(2);
g[0].push_back(make_pair(1, 3));
g[0].push_back(make_pair(1, 1));
dijkstra_pq(g);
}