最短路问题需要记录路径,需要找出多条长度一样的最短路径
思路
另外开一个数组记录从哪个点走过来的 类似邻接链表的形式记录被更新的点,最后用dfs搜索
代码
int dijkstra()
{
memset(d, 0x3f, sizeof d);
d[0] = 0;
for (int i = 0; i < n + 1; i ++ )
{
int t = -1;
for (int j = 0; j <= n; j ++ )
if ((t == -1 || d[j] < d[t]) && !st[j]) t = j;
st[t] = true;
for (int j = 1; j <= n; j ++ )
{
if (d[j] > d[t] + g[t][j])
{
d[j] = d[t] + g[t][j];
la[j].clear();
la[j].push_back(t);
}
else if (d[j] == d[t] + g[t][j])
{
la[j].push_back(t);
}
}
}
return d[prob];
}
void dfs(int u)
{
path.push_back(u);
if (u == 0)
{
check();
return;
}
for (int i = 0; i < la[u].size(); i ++ )
{
int j = la[u][i];
dfs(j);
path.pop_back();
}
}
|