Dijkstra+DFS
作者:互联网
1、使用Dijkstra算法记录所有的最短路径
vector<int> pre[maxv];
void Dijkstra(int s)
{
fill(d,d+maxv,inf);
d[s]=0;
for(int i=0;i<n;i++)
{
int u=-1;
int min=inf;
for(int j=0;j<n;j++)
{
if(vis[j]==false&&d[j]<min)
{
u=j;
min=d[j];
}
}
if(u==-1) return;
vis[u]=true;
for(int v=0;v<n;v++)
{
if(vis[v]==false&&G[u][v]!=inf)
{
if(d[u]+G[u][v]<d[v])
{
d[v]=d[u]+G[u][v];
pre[v].clear();
pre[v].push_back(u);
}
else if(d[u]+G[u][v]==d[v])
{
pre[v].push_back(u);
}
}
}
}
}
2、遍历所有最短路径,找出一条使第二标尺最优的路径
int optvalue;
vector<int> pre[maxv];
vector<int> path,tempPath;
void DFS(int v)
{
//递归边界
if(v==st)
{
tempPath.push_back(v);
int value;
计算路径tempPath上的value值;
if(value由于optvalue值)
{
optvalue=value;
path=tempPath;
}
tempPath.pop_back();
return;
}
//递归调用
tempPath.push_back(v); //压入
for(int i=0;i<pre[v].size();i++)
{
DFS(pre[v][i]);
}
tempPath.pop_back(); //弹出
}
康斯但丁丶 发布了183 篇原创文章 · 获赞 64 · 访问量 15万+ 私信 关注
标签:int,maxv,back,value,Dijkstra,DFS,tempPath 来源: https://blog.csdn.net/OpenStack_/article/details/104087774