Dijkstra具有优先级队列,分段错误

时间:2015-02-11 17:44:30

标签: 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);
   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循环之前。 我希望有人可以帮助我。

提前致谢!

0 个答案:

没有答案