前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode 743 | 网络延迟时间(图入门)

leetcode 743 | 网络延迟时间(图入门)

作者头像
ACM算法日常
发布2019-01-23 16:39:43
1.4K0
发布2019-01-23 16:39:43
举报
文章被收录于专栏:ACM算法日常

N 个网络节点,标记为 1N

给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。

现在,我们向当前的节点 K 发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1

注意:

  1. N 的范围在 [1, 100] 之间。
  2. K 的范围在 [1, N] 之间。
  3. times 的长度在 [1, 6000] 之间。
  4. 所有的边 times[i] = (u, v, w) 都有 1 <= u, v <= N1 <= w <= 100

图算法中,最短路径问题是比较经典的问题,用处也很广泛。本题是使用bellman-ford算法解决网络延迟的例子,bellman-ford算法相对于dijkstra算法更加简单,不过bf算法更加具有一般性,算法大概思路是不断更新距离,如果不存在变化,就完成了最短路径查找。

本题中先通过BF算法找出所有节点到K的距离,然后取得最大的距离。

流程图:

源代码:

代码语言:javascript
复制
#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>

#define INT_MAX 2147483647
#define min(a, b) (a < b ? a : b)
#define max(a, b) (a > b ? a : b)

/*
N是网络节点数(1-N)
K是起始节点
返回值:
返回从K到所有节点的最短时间
*/
int networkDelayTime(int **times, int timesRowSize, int timesColSize, int N, int K)
{
    int dist[N + 1];

    for (int i = 0; i < N + 1; ++i)
    {
        //初始化K到每个节点的距离为最大值
        dist[i] = INT_MAX;
    }

    //到自己的距离为0
    dist[K] = 0;

    int loop = 1;

    while (loop--)
    {
        //遍历所有边
        for (int i = 0; i < timesRowSize; i++)
        {
            //寻找变化的节点
            if (dist[times[i][0]] != INT_MAX)
            {
                int u = dist[times[i][0]];
                int v = dist[times[i][1]];
                int w = times[i][2];
                //更新较小路径
                dist[times[i][1]] = min(u + w, v);
                //存在更新
                if (v != dist[times[i][1]])
                    loop = 1;
            }
        }
    }

    int max_num = 0;

    //取得距离K节点最远的值
    for (int i = 1; i <= N; i++)
    {
        if (dist[i] == INT_MAX)
            return -1;

        max_num = max(max_num, dist[i]);
    }

    return max_num;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ACM算法日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档