[英]Error in Implementation of Dijkstra's Algorithm
我試圖用鄰接表來嘗試Dijkstra,我不知道為什么我的測試用例不及格。
Node * n = list[source].head;
while(n)
{
q.push(n);
v[n->b] = n->w;
n = n->next;
}
while(!q.empty())
{
n = q.front();
i = n->b;
o = list[i].head;
q.pop();
while(o)
{
if(!v[o->b])
{
q.push(o);
v[o->b] = v[i] + o->w;
}
else if(v[o->b] > v[i] + o->w)
{
v[o->b] = v[i] + o->w;
}
o = o->next;
}
}
i = 0;
while(i < vertices)
{
if(i != node)
printf("%d ", v[i] ? v[i] : -1);
i++;
}
cout<<"\n";
我正在通過瑣碎的測試用例。
輸入示例:(xyw),1 2 3,1 3 4,1 4 5,3 5 101,
來源為1。
輸出:3 4 5 5
示例2:1 2 24 1 4 20 3 1 3 4 3 12
來源為1。
輸出:24 3 15
但是,我無法通過更復雜的測試用例。
似乎您在混淆這兩個數組-一個數組已經訪問了頂點,另一個數組用於最佳的特殊距離(即到目前為止找到的頂點的最佳距離)。 讓我們用v
表示訪問數組,用dist
表示最佳距離數組。
在此語句中:
if(v[o->b] > v[i] + o->w)
您需要使用dist
而不是v
。
彈出節點后,您需要檢查是否已訪問它。 如果已訪問,請繼續到下一個節點。 否則,將其標記為已訪問並執行其余邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.