如果std::vector<vector<pair<int,int> > > v(n)
代表與pair<int,int>
圖的鄰接表是{vertex,weight}
對,我試圖實現該算法通過以下方式:最有效的實現使用向量和對在C++ STL Dijkstra的最短路徑的
while (true)
{
long long yo = LLONG_MAX;
int ind = -1;
for (int i = 0; i < n; ++i)
{
if (ans[i] < yo && !v[i].empty())
{
ind = i;
yo = ans[i];
}
}
if (ind == -1)
break;
for (int i = 0; i < v[ind].size(); ++i)
{
if (ans[v[ind][i].first] > ans[ind] + v[ind][i].second)
ans[v[ind][i].first] = ans[ind] + v[ind][i].second;
v[ind].erase(v[ind].begin() + i);
}
}
其中ans[i]
存儲被初始化爲{LLONG_MAX,...0,...LLONG_MAX}
,0
爲源的最短路徑。由於這是我第一次嘗試實現它,是否有更好的方法來實現在stl中使用向量/列表(就時間/空間複雜性而言)?
這個問題可能更適合[代碼評論](http://codereview.stackexchange.com),因爲它似乎是關於已經工作的代碼。 – cdhowie
「更好」的條款是什麼?速度?內存使用情況?我個人認爲最可讀性;) – user463035818
@ tobi303時間和內存使用情況 – yobro97