次短路(第二最短路径)

第二最短路径

有句古话叫“不破不立”,这个思想跟次短路也就是第二最短路的思想一样。

算法思想:计算原图的最短路,并保存路径。一一破坏最短路中的每一条边,重新计算最短路,并排序。最小的那个就是第二最短路。

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++)
    {
   
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值