精华内容
下载资源
问答
  • 里面的最短路径

    2021-04-15 10:36:34
    这里讨论的问题是,给定一个带权的有向G与源点v,从v到G中其余顶点的最短路径。 算法的思想: 假设有n个顶点,那么就有n-1条最短路径,因为从某个点开始到其余的n-1个点都有一条最短路径。迪杰斯特拉提出了按

    最短路径对应的现实问题

    计算机网络中路由算法其实对应的就是最短路径问题,从一个结点到另一个结点,怎么样的走才是最小代价。

    从某顶点都其余顶点的最短路径(迪杰斯特拉 Dijkstra)

    这里讨论的问题是,给定一个带权的有向图G与源点v,求从v到G中其余顶点的最短路径。
    在这里插入图片描述

    算法的思想
    假设图有n个顶点,那么就有n-1条最短路径,因为从某个点开始到其余的n-1个点都有一条最短路径。迪杰斯特拉提出了按照路径长度的递增顺序求得最短路径,也就是先求得这n-1条路径里面最短的那一条路径,然后再求得第二短的那条最短路径,直到求出n-1条最短路径。
    假设有一个最短路径结点的集合S,设当前的S={V0},从V0开始,每求得一条最短路径,(V0,…,Vk),就将Vk加入到S集合中,直到全部顶点都被加到集合中。

    性质:
    假设S是已经求得的最短路径的终点的集合,那么可以证明下一条最短路径(假设这条路径的终点为Vk),肯定是(V0,Vk)或者是经过集合S中顶点便可到达Vk的路径。(通俗的解释就是,下一条路径要不就是V0直达终点Vk,要不就是V0通过S中的随意个顶点进行跳转然后达到Vk)。

    性质的证明:反证法,假设在生成(V0,…,Vp,…,Vk)这条最短路径中有一个顶点Vp,如果这个Vp不在集合S中,并且有(V0…Vp)要比(V0,…,Vk)要短。但是这个是不可能的,因为我们生成最短路径的时候已经是长度的递增顺序开始的,因此比这条最短路径长度要短的都已经生成了,而且它们的终点都已经存在集合S中了。

    在这里插入图片描述

    解释:
    利用上图并结合性质来理解寻找最短路径,首先S={V0},从V0开始,最短的最短路径是可能是(V0,V1),(V0,V3)(V0,V4),对比这三条,发现最短的是(V0,V3),所以V3进入集合S。到V3最短路径为10。

    S={V0,V3}接着找第二短的最短路径,可能是V0直达的(V0,V1),(V0,V4),或者是经过V3跳转的(V0,V3,V4),通过对比发现,最短的那条应该是(V0,V1),所以V1入S集合。到V3最短路径为30。

    S={V0,V3,V1},接着找第三短的最短路径,可能是(V0,V4)或者是经过V3跳转的(V0,V3,V4),经过V1跳转的(V0,V1,V4),(V0,V1,V2),对比发现(V0,V3,V4)最短的,所以V4如S集合。到V4最短路径为10+30=40,所以可以发现对于顶点V4,其实已经把错误的路径给排除掉了。
    …一直找到所有的顶点都入S了,就说明n-1条最短路径已经找完了。

    已经知道利用性质如何人工查找最短路径,那么现在就是把人工做的操作交给电脑进行实现。
    代码如下:
    在这里插入图片描述

    int S[MaxVertices];//存放已经求出最短路径的顶点
    int path[MaxVertices];//该条最短路径上该顶点的前一个顶点
    int dist[MaxVertices];//存放从顶点V0到其他顶点的当前的最短路径。dist存放的当前路径的最短路径不一定是真正的最短路径,只有该顶点已经入S的情况下,它对应的dist里面的值才是正确的。
    
    void shorttesstPath_Dijkstra(AdjMatrix G,int v){  //G是具有n个顶点的带权有向图,求源点V到其余各顶点的最短路径
    	for(int i=0;i<G.num;i++){  //G.num是顶点个数
    		dist[i]=G.Edge[v][i];  //G.Edge[][] 是存储边的邻接矩阵
    		s[i]=0;
    		if(i!=v&&dist[i]!=MAXNUM){//MAXNUM是正无穷,也就是两点无直接相连的边或者是自己到自己
    			path[i]=v;
    		}else{
    			path[i]=-1;
    		}
    	}
    	s[v]=1;//代表V点已经入S
    	dist[v]=0;//代表自己到自己路径为0
    	for(i=0;i<G.num-1;i++){//求第i+1条边
    		float min=MAXNUM;
    		int u=v;
    		for(int j=0;j<n;j++){
    			if(!s[j]&&dist[j]<min){ u=j;min=dist[j]}//找到当前剩余最短路径中的最短路径
    		}
    		s[u]=1;//将u入s
    		for(int w=0;w<G.num;w++){//当新的顶点入S的时候,跟新顶点直接相连的顶点的最短路径可能会发生改变
    		 if(!S[w]&&G.Edge[u][w]<MAXNUM&&G.Edge[u][w]+dist[u]<dist[w])
    		 {dist[w]=G.Edge[u][w]+dist[u];
    	      path[w]=u;
    		 }
    		}
    	}
    
    }
    

    图中每对顶点的最短路径

    刚刚已经知道了从v0到途中其他顶点的最短路径,那么如果采用迪杰斯特拉算法的话,只要将图中的每个顶点都运行一遍,那么就能知道图中每一对最短路径,和最短路径长度。

    但是还有一种比这个方法更简单的算法,就是弗洛伊德(Floyd)算法。有向权图,还是用邻接矩阵Edge[n][n]来表示,设置一个nXn的一个方阵dist[n][n],初始时对角线的值为0,代表自己到自己为0。其他的元素dist[i][j]与Edge[i][j]的值相同,值的含义为i点到j点的最短路径长度。该路径不一定是最短路径,还需要进行n次的试探。首先考虑V0点作为中间顶点,判断(Vi,V0,Vj)是否存在,如果存在取(Vi,V0,Vj)和(Vi,Vj)中小的那一条,存入到dist[i][j]。然后可以考虑增加V1当做中间顶点,由于dist[i][1]和dist[1][j]分别是Vi到 V1 , V1 到Vj经过中间顶点不大于0顶点的最短距离,所以只要找dist[i][1]+dist[1][j] 和dist[i][j]中的最小者存入dist[i][j]。继续考虑增加…直到考虑所有的顶点之后,d[i][j]就是i到j的最短路径了。

    按照上述的逻辑,算法如下

    void shorttesstPath_Floyd(AdjMatrix G){ 
     for(int i=0;i<G.num;i++)
     { for(int j=0;j<G.num;j++)
    	 { if(i==j){dist[i][j]=0;} //对角线置零
           else {dist[i][j]=G.Edge[i][j]} 
    	   
           if(i<>j&&dist[i][j]<MAXNUM){ path[i][j]=i;}//i和j有边,对这条边而言,终点j的前一个顶点是i
           else { path[i][j]=-1;}//没有边或者是自己的情况,没有前一个顶点
    	 }
     }
     
     
     for(int k=0;k<G.num,k++)//逐渐增加中间顶点
    	 for(int i=0;i< G.num,i++) //遍历整个dist
    		 for(int j=0;i< G.num,j++)
    		 { if(dist[i][k]+dist[k][j]<dist[i][j]) //对于每个ij而言,如果有中间顶点加入路径更小,
    		   {dist[i][j]=dist[i][k]+dist[k][j];//就更新dist[i][j]
    	        path[i][j]=path[k][j]; //对于i和j的边,更新终点j的前一个顶点
    		   }
    		 }
    }
    
    展开全文
  • 前言 本章讨论的最短路径问题 方法 1.概念 所谓的最短路径,就是用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展...如果求A出发到G的最短路径怎么求呢?那么按...

    前言

         本章讨论图的最短路径问题

    方法

    1.概念

    所谓图的最短路径,就是用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。日常生活中如高德地图、百度地图会有类似换乘少、路程短等导航推荐,就是基于图的最短路径。

    2.最短路径类型

    1)非加权图的最短路径

    我们拿上个博客中的例子来看:

     如果求A出发到G的最短路径怎么求呢?那么按照段数进行区别,段数越少代表最短路径。

    也许,你可以从上面的图中一眼就看出来最短路径,当然这只是一个十分简单的图,一旦复杂起来,就需要借助相应的算法。

    该算法类似于树的层次遍历,需要借助队列来实现。

    • 首先将目标顶点A入队列。
    • 当队列不为空时,执行循环:
    •          顶点出队列,遍历该顶点的邻接表,更新它们距顶点的最短距离(无权图一段距离为1),更新它们的上一个结点。它们(该顶点的邻接点)入队列。
    • 当队列为空时,遍历完A的所有可达顶点。可以得到到所有顶点的最短路径。

    具体的算法过程我已经在资源中给出。

    2)加权图的最短路径

    求下面这个加权图的最短路径

    假设加权图的权代表结点间的距离,求v1到v8的最短路径。

    要想解决该问题,我们需要使用狄克斯特拉算法(Dijkstra算法来求解!

    具体的算法过程我已经在资源中给出。

     

    展开全文
  • 知道了什么是最短路径之后,怎么样实现这个最短路径问题,找到给出某个中的最短路径呢,下面介绍两种实现最短路径的算法(迪杰斯特拉和弗洛伊德)这里注意一点: 通常采用迪杰斯特拉算法求图中某一顶点到其余各...

    最短路径问题

    文章目录:

    • 最短路径的概念
    • 迪杰斯特拉算法
    • 弗洛伊德算法

    1.最短路径

        首先我们要清楚什么是最短路径,怎么样称为最短。
        概念:从图中的某个顶点出发到达另外一个顶点的所经过的边的权重(权值)之和最小的一条路径,称为最短路径。
    

    在这里插入图片描述

    知道了什么是最短路径之后,怎么样实现这个最短路径问题,找到给出某个图中的最短路径呢,下面介绍两种实现最短路径的算法(迪杰斯特拉和弗洛伊德)这里注意一点:
    通常采用迪杰斯特拉算法求图中某一顶点到其余各顶点的最短路径
    通常采用弗洛伊德算法求图中任意一对顶点间的最短路径
    下面首先来讲解迪杰斯特拉算法

    2.迪杰斯特拉算法

    1.算法思想:

    设有两个顶点集合S和T,集合S中存放图中已找到最短路径的顶点,集合T存放图中剩余顶点,初始状态时,集合S中只包含顶点V0,然后不断从集合T中选取到顶点v0路径长度最短的顶点Vu并入到集合S中。这里需要注意的是,集合S每并入一个新的顶点Vu,都要修改顶点V0到集合T中顶点的最短路径长度值。之后不断重复此过程,直到集合T的顶点全部并入到S中为止。
    这里详细说一下为什么要每并入新的顶点都要修改顶点V0到集合T中顶点的最短路径长度值
    在Vu被选入S中后,Vu被确定为最短路径上的顶点,此时Vu就像V0到达T中顶点的中转站,多了一个中转站,就会多一些到达T中顶点的新的路径,而这些新的路径有可能比之前V0到T中顶点的路径要短,因此如果比之前路径短的话需要修改原有V0到T中其他顶点的路径长度。

    如图所示,首先刚开始1并入S中,并入后多了1—2的路径,原来0—2的路径长度为6,而现在通过1这个“中转站”,使得0—2的路径变为4+1=5小于原来0–2的路径长度6,所以就要修改之前0—2路径的长度。

    在这里插入图片描述

    相信你已经了解了很多,下面给出算法的执行过程:
    2.图解执行过程

    引进三个辅助数组:dist[],path[]和set[]。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • dist[Vi]表示当前已找到的从V0到每个终点Vi的最短路径长度,它的初态为:若从V0到Vi有边,则dist[Vi]为边上的权值,否则置dist[Vi]为∞。
    • path[Vi]中保存从V0到Vi最短路径上Vi的前一个顶点假设最短路径上的顶点序列为V0,V1,V2…Vi-1,Vi,则path[Vi]=Vi-1;path[]的初态为:如果V0到Vi有边,则path[Vi]=V0,否则path[Vi]=-1。
    • set[]为标记数组,set[Vi]=0表示Vi在T中,即没有并入到最短路径;set[Vi]=1表示Vi在S中,即已经并入到最短路径。set[]初态为:set[V0]=1,其余元素全为0.

    给出具体的操作过程
    1.从通往当前剩余顶点的路径中选出长度最短的,并将其顶点并入到最短路径中,对应顶点的set数组对应值置1,。
    2.将此顶点作为中间点检测剩余顶点,并修改V0到剩余顶点的最短路径长度。
    3.从通往当前剩余顶点的路径中选出长度最短的,并将顶点并入到最短路径中,和步骤1一样,之后执行对应并入顶点的步骤2,直到所有顶点都已经并入到最短路径中,求解过程结束。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

    3.代码执行过程

    /*
    1.对各数组进行初始化
    2.循环找到通往所有剩余顶点的路径中长度最短的并并入最短路径中
    3.以刚并入的顶点作为中间点,对所有通往剩余顶点的路径进行检测
    4.如果顶点的加入出现了通往路径的更短的路径则进行修改
    5.重复上述过程直到所有顶点并入到最短路径中
    */
    /*********核心代码**********/
    void Dijkstra(MGraph g,int v,int dist[],int path[])
    {
      int set[maxsize];
      int min,i,j,u;
      //1.初始化
      for(i=0;i<g.n;++i)
      {
        dist[i]=g.edges[v][i];//将v0距离各个边的权值距离存入数组
        set[i]=0;
        if(g.edges[v][i]<INF)
           path[i]=v;
        else
           path[i]=-1;
       }
       set[v]=1;path[v]=-1;
       //2.找到通往所有剩余顶点的路径中长度最短的并并入最短路径中
       for(i=0;i<g.n-1;++i)
       {
         min=INF;
         for(j=0;j<g.n;++j)
            if(set[j]==0 && dist[j]<min)
              {
                u=j;
                min=dist[j];
              }
         set[u]=1;
       //3.以刚并入的顶点作为中间点,对所有通往剩余顶点的路径进行检测
         for(j=0;j<g.n;++j)
         {
       //4.如果顶点的加入出现了通往路径的更短的路径则进行修改
           if(set[j]==0 && dist[u]+g.edges[u][j]<dist[j])
           {
               dist[j]= dist[u]+g.edges[u][j];
               path[j]=u;
            }
          }
       }
     }
     
    
    //邻接矩阵的结构型定义:
    typedef struct
    {
     int no;//顶点编号
     char info;//顶点的其他信息,这里很少用到
     }vertextype;//顶点类型
     typedef struct
     {
     //图的定义
     int edges[maxsize][maxsize];
     //邻接矩阵定义,如果是有权图,则在此句中将int改为float
     int n,e;//分别为顶点数和边数
     vertextype vex[maxsize];
     }MGraph;
    
    

    4.时间复杂度
    基本操作执行的总次数为双层循环执行的次数,为n^2次,所以,此算法的时间复杂度为O(n ^2).
    应用:该算法常用于路由算法或者作为其他图算法的一个子模块

    明天再写弗洛伊德算法!2020.7.6

    展开全文
  • floyd求最短路径

    2019-11-28 16:26:36
    这道题目单看弗洛伊德算法的话不是很难,就是这个输出...给出一个有向的结构,所有顶点间的最短路径 输入 若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有3个数,分别是该条弧所关联...

    这道题目单看弗洛伊德算法的话不是很难,就是这个输出路径这一点难以想到,后来也是看到别人思路,可以用递归求路径。这是一个不怎么规范的题解。

    :floyd求最短路径
    查看 提交 统计 提问
    总时间限制: 10000ms 内存限制: 1000kB
    描述
    给出一个有向图的结构,求所有顶点间的最短路径

    输入
    若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有3个数,分别是该条弧所关联的两个顶点编号和弧的权值
    输出
    若干行
    每行第一个为一个整数,为最短路径值,其余为若干个空格隔开的顶点构成的最短路径序列(用小写字母)
    若无最短路径,直接输出no answer
    样例输入
    3 5
    0 1 4
    0 2 11
    1 0 6
    1 2 2
    2 0 3
    样例输出
    4 v0 v1
    6 v0 v1 v2
    5 v1 v2 v0
    2 v1 v2
    3 v2 v0
    7 v2 v0 v1

    #include<bits/stdc++.h>
    using namespace std;
    int path[100][100];
    void dfs(int x,int y)
    {
        int k=path[x][y];
        if(k==-1)
            return;
        dfs(x,k);
        cout<<"v"<<k<<' ';
        dfs(k,y);
    }//运用递归求路径
    void Floyd()
    {
        int vexterNum;
        int edgeNum;
        cin>>vexterNum>>edgeNum;
        int a,b;
        int dist[vexterNum+1][vexterNum+1];
        int vis[100];
        for(int i=0;i<vexterNum;i++)
        {
            for(int j=0;j<vexterNum;j++)
            dist[i][j]=9999;
        }
        for(int i=0;i<edgeNum;i++)
        {
            cin>>a>>b;
            cin>>dist[a][b];
        }
        for(int k=0;k<vexterNum;k++)
        {
            for(int i=0;i<vexterNum;i++)
            {
                for(int j=0;j<vexterNum;j++)
                {
                    if(i==j||i==k||j==k)
                        continue;
                    if(dist[i][k]+dist[k][j]<dist[i][j])
                    {
                        dist[i][j]=dist[i][k]+dist[k][j];
                        path[i][j]=k;
                    }
                }
            }
        }
        bool flag=false;
        for(int i=0;i<vexterNum;i++)
        {
            for(int j=0;j<vexterNum;j++)
            {
                    if(dist[i][j]!=9999)
                    {
                        flag=true;
                        cout<<dist[i][j]<<' ';
                        cout<<'v'<<i<<' ';
                        dfs(i,j);
                        cout<<'v'<<j<<endl;
                    }
            }
        }
        if(flag==false)
            cout<<"no answer!"<<endl;
    }
    int main()
    {
        memset(path,-1,sizeof(path));
        Floyd();
    }
    
    
    展开全文
  • 连通全最短路径 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达...
  • 现在给出一个无向网G现在让你从0点开始 出到每个点的最短路径 如下: 首先我们也不需要去考虑什么算法怎么去实现啊,怎么写代码之类的问题,现在就考虑一下如果让我们自己去选择最短路径,选择出来一个路径...
  • 最短路径算法

    2021-01-03 01:01:44
    如下取顶点1到其它顶点的最短路径。 除去1,还有五个顶点,先列出1到其它顶点的距离,在不经过其它顶点的情况下的距离,无法直达的用正无穷表示,这里用00代替,可以得到一个距离数组distant={0, 1,
  • Dijkstra 最短路径算法详解 无向

    万次阅读 多人点赞 2018-04-03 22:23:55
     对于求最短路径的问题一般都会给出一幅,或者边与边的关系。如上。假设我们起点是A,我们要求到F的最短距离,我们会怎么做? 首先,因为A是起点,所以我们把对于每个点都有个参数,相对于A的距离,默认除了A...
  • 题目中给了我们一张,然后要我们 点1 到 点n 的具体某一条最短路径。我们知道,如果一条最短路径里面包含 i-1 和 i 这两个点,i-1 到 i 的边权值为 w 。则必然有关系式: d[ i ]=d[ i-1 ]+w 所以,我们可以根据...
  • 解析Bellman-Ford算法求最短路径

    千次阅读 2014-01-31 20:07:11
    上一篇博文已经说了用dijkstra算法来求图(有向和无向)的最短路径了,那么怎么还需要使用Bellman-Ford算法来求解最短路径问题呢?其实这两个算法有各自求解的限制条件:dijkstra算法不能求解包含负权的;但是...
  • 图表算法—最短路径

    2019-09-24 12:41:07
    1. 什么是最短路径(Shortest Path)   对于一个有向(不了解有向的,建议先看一下有向),如果它的... 给定一个点,这个点到所有其它点的最短路径。这就是本篇算法要解决的问题。  如果学会了本篇算...
  • 有一张n个顶点m条边 每条边上都有权值叫你顶点1到其他顶点的最短路径 step 1 找出离顶点1最近的点(这好找吧)使用一个数组将每个点到顶点1 的最短路径记录下来(dis数组) 还有已经找到离顶点1最短路径的要...
  • 本节内容 最短路径 BFS算法 王道考研/ 最短路径问题 6 R城 Y城 G港是个物流集散中经常需要往各个城市运东 10 怎么运送距离最近单源最短路径...P城 M城 2 王道考研/ BFS的单源最短路径 1 2 3 4 5 6 7 8 注权可以
  • 我使用spark的graphx计算框架,现在要求一个中所有节点对的最短路径条数, graphx下的pregel迭代貌似使用的是类迪杰斯特拉算法,要求最短路径长度很容易, 但是要求条数,我实在是想不出来怎么求,希望各位大神...
  • 两个顶点之间的一条【路径长度最短】的路径 例子 用BFS,怎么得到【路径】: 改变队列的结构,入队列的顶点新增一个【域】(记录上一个顶点) 【路径】即一直往上找 【例子中】找到5,往上找,5-&amp...
  • 最短路径之Dijkstra算法Java实现

    千次阅读 2018-03-19 16:45:02
    以下为例,顶点v1到其他顶点的最短路径 初始化dis数组,怎么初始化呢?v1→v1设置为0,不能直接到达的设置为无穷大,能直接到达的附权值,并且定义集合T,初始化为{v1},集合T表示已经确定最短路径的顶点,...
  • Floyd算法允许中有带负权值的边,但不许有包含带负权值的边组成的回路。...可是怎么只找到从源点到某一个特定终点的最短路径,其实这个问题和源点到其他所有顶点的最短路径一样复杂,时间复杂度依然是O(n^2)。  
  • js实现最短路径求解,简单易懂

    千次阅读 2019-07-05 16:29:28
    网上看到很多最短路径求解问题的js实现版本,看了老半天,没怎么看懂。 看懂了我也复现不了。+_+! 所以自己写了个简单易懂的,小白容易看懂。 至于大佬,,,,觉得写的不好你来打我咯。。。 别看代码长,一大半是...
  • 看完题目很快能想到先用dijkstra算法把最短路径求出来,可是出来之后该怎么处理呢? 最短路径组成的子图上再一下最小生成树?我用kruskal算法的时候感觉到了不对劲,最短路径子图如果当成无向来处理就不能...
  • #include #include using namespace std ; #define MUNum 20 #define INFINITY 32767 #define Myprintf cout typedef struct PlaneGraph ...在路线输入:1 9 和 9 1的时候路线不一样,请问怎么解决
  • 众所周知,迪杰斯特拉算法是单源最短路的,是一个点到多个点的最短路径 这个题目给你的是的路都是单向的路。 而这题先让你多个点到单个点的最短路,然后再单个点到多个点的最短路。 多个点到单个点...
  • 题意:给你一个正方形的盒子,里面有一些线段,从(0,5)出发到(10,5)的...Dijkstra算法是一个点到其他所有点的最短路径首先要知道刚开始的,才能进行最短路,怎么建图呢? 根据题意我们知道最短路径一定经过
  • 之前介绍了Dijkstra算法某个顶点到其他每个顶点之间的最短路径,那么每一对顶点的最短路径呢?对,可以重复调用Dijkstra算法,Dijkstra算法的时间复杂度是O(n*n),调用n次,所以总的时间复杂度是O(n*n*n),接下来...
  • 1~i的最短路径应该怎么求得? 首先以1为头结点: 1->2:8 1->3:8 1->4:999999(不可直达) 1->5:5 现在得到距离1 节点最近的是节点5,再把节点5作为中间点,看看能不能更新一下1到别的节点的距离...
  • 在博客上发表了最短路的Dijkstra算法后,有很多同学对路径比较感兴趣。也就是说,他们不仅想知道最后的结果,也想知道结果是怎么来的。想想也是自己的坏习惯所致,浅尝辄止。重新把Dijkstra算法的思路整理一遍,...
  • 单源最短路径问题,即给定一张有向(其实无向也可以看作是有向,即将无向的一条边看成是两条有向的边),设1号节点为起点,其到i号节点的最短距离 先来给出一个具体的题目,然后看看这两种算法是怎么写出...
  • 携程 最短路径的代价

    2014-04-15 20:23:00
    携程的一道图论题 题意:给出一张无向 每条边有一个长度和 删除该边的权值 再给出起点和终点 从起点到终点的最短路增加 要删除的边的最小的... 再这个的最小割 就是答案了 怎么把这些路径都找出来呢 两...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 127
精华内容 50
关键字:

图最短路径怎么求