第二最短路径
有句古话叫“不破不立”,这个思想跟次短路也就是第二最短路的思想一样。
算法思想:计算原图的最短路,并保存路径。一一破坏最短路中的每一条边,重新计算最短路,并排序。最小的那个就是第二最短路。
1.用dijkstra计算u->v的最短路径,保存路径上的每条边
2.依次删除最短路径上的每一条边(每次删一条),重新计算新的u->v最短路径(新的最短路>=原最短路)
3.把所有新的最短路排序,最小的那个就是第二最短路(这里存在第二最短路可能与原最短路相同,根据题目要求选择即可)
#include <iostream>
#define N 205
#define MAX 0x03fffffff
using namespace std;
int Metrix[N][N];
int dist[N];
int vist[N];
int path[N];
struct edge
{
int s,t,cost;
}E[N];
void OutPath(int s,int t,int NV)//输出路径
{
for(int i=1;i<=NV;i++)
{
cout<<path[i]<<" ";
}
cout<<endl;
int u=s,v=t;
while(v!=s)
{
cout<<v<<"-->";
v=path[v];
}
cout<<u<<endl;
}
int Dijkstra(int s,int t,int NV)
{
int u=s,v=t;
for(int i=1;i<=NV;i++)
{
dist[i]=MAX;
vist[i]=0;
}
for(int i=1;i<=NV;i++)
{

最低0.47元/天 解锁文章
427





