迪杰斯特拉Dijkstra算法C++实现
dasdsadddd:
[code=cpp]
for (int i = 0; i < this->vexnum; i++)
{//返回地找
ArcType mind = MAX;
int v = i;
for (int j = 0; j < this->vexnum; j++)
{//一个劲地往前走
//(移出for)int v = i;
if (!solved[j] && dist[j] < mind)
{
mind = dist[j];
v = j;
}
}
solved[v] = true;
int w = this->firstadj(v);
while (w != -1)
{
k++;
if (dist[v] + this->arcs[v][w] < dist[w])
{
dist[w] = dist[v] + this->arcs[v][w];
path[w] = path[v];
path[w].push(vexs[w]);
}
w = this->nextadj(v, w);
}
}
[/code]
不应该把while循环嵌套进第二个for循环,而是找到当前最短路径后再进行,您这样虽然结果是对的,但是进行了很多无用while
|