图的最短路径(一)-两节点间最短路径

原创 2016年08月29日 21:50:30

深度优先遍历+剪枝

       

#include<stdio.h>
int min=9999999,book[101],n,e[101][101];   //这里用9999999代表正无穷

//cur是当前所在城市的编号,dis为当前已经走过路程
void dfs(int cur,int dis)
{
    int j;
    //如果当前走过的路程已经大于之前所找到的最短路,则没有必要再往下尝试了,立即返回
    if(dis>min)
        return;
    if(cur==n)   //判断是否已经到达了目标城市
    {
        if(dis<min)   //更新最小值
            min=dis;
        return;
    }
    for(j=1;j<=n;j++)  //从1号城市到n号城市依次尝试
    {
        if(e[cur][j]!=9999999&&book[j]==0)
        {
            book[j]=1;
            dfs(j,dis+e[cur][j]);
            book[j]=0;
        }
    }
    return;
}

int main()
{

    int i,j,m,a,b,c;
    scanf("%d %d",&n,&m);
    //初始化二维矩阵
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
    {
        if(i==j)
            e[i][j]=0;
        else
            e[i][j]=9999999;
    }
    //读入城市之间的道路
    for(i=1;i<=m;i++)
    {
        scanf("%d %d %d",&a,&b,&c);
        e[a][b]=c;
    }

    //从1号城市出发
    book[1]=1;
    dfs(1,0);
    printf("%d",min);
    return 0;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

二叉树系列——二叉树中任意两个节点之间的最短路径

来源:https://segmentfault.com/a/1190000003465753 题目:给定一棵二叉树的根节点和两个任意节点,返回这两个节点之间的最短路径 思路:两个节...
  • liuyi1207164339
  • liuyi1207164339
  • 2016年03月17日 21:56
  • 4146

计算无向无权图中两点间所有的最短路径

一、例子 如上图,节点0到节点5的最短路径长度为3,有两条最短路径: 路径1:0 — 1 — 4— 5 路径2:0 — 1 — 2— 5 计算过程:首先计算起点0与终点5间的最短距离,从起点0,搜索0...
  • xiayingping
  • xiayingping
  • 2014年02月23日 22:28
  • 2268

Floyd算法求所有点对之间的最短路径

package datastucture; public class Floyd { /** * Floyd算法求所有点对之间的最短路径 * 原理:主要是通过遍历的方式任何一对顶点之间vi...
  • WitsMakeMen
  • WitsMakeMen
  • 2013年05月06日 21:25
  • 4128

图的所有节点对之间的最短路径—Floyd算法(C++)

Dijkstra算法之后是Floyd算法 Dijkstra算法是求单源最短路径(即固定起点,不固定终点) Floyd算法是求任意点对之间的最短路径(起点和终点都任意)Floyd算法也叫Floyd-...
  • zhujiahui622
  • zhujiahui622
  • 2016年08月08日 18:52
  • 290

所有节点对最短路径 超时 优先队列 + dijkstra + 遍历前驱子图

贴代码在此,有待后续改进。 #include #include #include #include #include #include #include using namespace std; ...
  • zn505119020
  • zn505119020
  • 2015年05月22日 11:21
  • 517

(阶段三 dijkstra算法温习1.1)HDU 2544 最短路(利用dijkstra算法计算两个节点间的最短路径)

/* * HDU_2544_2.CPP * * Created on: 2013年11月10日 * Author: Administrator */ #include #i...
  • caihongshijie6
  • caihongshijie6
  • 2013年11月10日 15:42
  • 1363

Floyd-Warshall 算法-- 最短路径(适合节点密集的图)

由于此算法时间复杂度为O(V³),大多数情况下不如迪杰斯特拉算法的,迪杰斯特拉算法适合于节点疏散的图。 示例图如下:  Step 1 创建节点与边的最短路径结果表(直接可达关系),数值表示距离,INF...
  • csharp25
  • csharp25
  • 2015年07月12日 13:29
  • 2174

(Java)求两顶点间最短路径和距离

  • 2017年06月17日 16:23
  • 7KB
  • 下载

多叉树-找到X和Y最短路径,打印输长度和节点

多叉树 多叉树,单个节点Node数据结构,大概如下: struct Node { //注:只有儿子节点,没父亲节点 intvalue; Listchild_list; }; 函数输入:...
  • qq_34512307
  • qq_34512307
  • 2018年01月09日 23:31
  • 9

算法导论 所有节点对的最短路径

本章主要讲述: 1.Floyd-Warshall算法:求解任意两点间的最短距离,时间复杂度为O(n^3)。  (1)使用条件&范围:通常可以在任何图中使用,包括有向图、带负权边的图。  (2)弗洛伊德...
  • u012017783
  • u012017783
  • 2016年12月10日 16:40
  • 1064
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图的最短路径(一)-两节点间最短路径
举报原因:
原因补充:

(最多只允许输入30个字)