最短路径 Dijkstra

邻接矩阵版

const int N = 510, INF = 0x3f3f3f3f;
int G[N][N], d[N], n, m, a, b, c;
bool visited[N];
int Dijkstra(int s)
{
   
    // fill(d, d + N, INF);		// 初始化到各点的最短距离
    memset(d, 0x3f, sizeof d);
    d[s] = 0;					// s为出发点
    for(int i = 1; i <= n; ++i)
    {
   
        int u = -1;				// 寻找此时已更新的最短距离最小的点
        for(int j = 1; j <= n; ++j)
            if(visited[j] == false && (u == -1 || d[j] < d[u]))
                u = j;
        visited[u] = true;		// 更新u所能到达的点的最短距离
        for(int v = 1; v <= n; ++v)
            if(visited[v] == false && G[u][v] != INF && G[u][v] + d[u] < d[v])
                d[v] = d[u] + G[u][v];
    }							// d[n]为INF则不存在最短路径,无法到达
    return d[n] == INF ? -1 : d[n];
}
int main()
{
   
    cin >> n >> m;
    fill(G[0], G[0] + N * N, INF);
    // memset(G, 0x3f, sizeof(G));
    while(m--)
    {
   
        cin >> a >> b >> c;	
        G[a][b] = min(G[a][b], c); // 可能存在的重边,取权值最小的边
    }
    cout << Dijkstra(1);
    return 0;    
}

邻接表版

const int N = 1e5 + 10, INF = 0x3f3f3f3f;
int h[N], e[N], ne[N], w[N], n, m, idx = 0, d[N];
bool visited[N];
void add(int a, int b, int c)
{
   
    e[idx] = b; ne[idx] = h[a]; w[idx] = c; h[a] = idx++;
}
int Dijkstra(int s)
{
   
    fill(d, d + N, INF);	// 初始化到各点的最短距离
    d[s] = 0;
    for(int i = 1; i <= n; ++i)
    {
   
        int u = -1;			// 寻找此时已更新的最短距离最小的点
        for(int j = 1; j <= n; ++j)
            if(visited[j] == false && (u == -1 || d[j] < d[u]))
                u = j;
                
        visited[u] = true;	// 更新u所能到达的点的最短距离
        for(int v = h[u]; v != -1; v = ne[v])
        {
   
            int j = e[v];
            if(visited[j] == false && w[v] + d[u] < d[j])
                d[j] = w[v] + d[u];
        }
    }					    // d[n]为INF则不存在最短路径,无法到达
    return d[n] == INF ? -1 : d[n];
}

int main()
{
   
    fill(h, h + N, -1);
    cin >> n >> m;
    for(int i = 0; i < m; ++i)
    {
   
        int a, b, c;
        cin >> a >> b >> c;
        add(a, b, c);
    }
    cout << Dijkstra(1);
    return 0;    
}

相关推荐

  1. 路径 Dijkstra

    2024-01-18 16:56:01       55 阅读
  2. 路径问题(Dijkstra/Floyd)

    2024-01-18 16:56:01       37 阅读
  3. 算法与数据结构--路径Dijkstra算法

    2024-01-18 16:56:01       67 阅读
  4. 使用Dijkstra算法解决路径问题

    2024-01-18 16:56:01       52 阅读
  5. 手撕算法系列----Dijkstra单源路径

    2024-01-18 16:56:01       44 阅读
  6. VOJ 圣诞树 题解 路径 dijkstra算法

    2024-01-18 16:56:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-18 16:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-18 16:56:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-18 16:56:01       82 阅读
  4. Python语言-面向对象

    2024-01-18 16:56:01       91 阅读

热门阅读

  1. ElasticSearch高阶使用

    2024-01-18 16:56:01       40 阅读
  2. Docker查找docker组及用户

    2024-01-18 16:56:01       51 阅读
  3. 深度学习中的最优化算法是什么?

    2024-01-18 16:56:01       67 阅读
  4. gateway和base包+Jdk17和Jdk8版本切换(总结)

    2024-01-18 16:56:01       52 阅读
  5. 【协议】XMLHttpRequest的梳理和总结

    2024-01-18 16:56:01       48 阅读
  6. openlayers [一] openlayers简介

    2024-01-18 16:56:01       48 阅读
  7. udf提权

    udf提权

    2024-01-18 16:56:01      53 阅读
  8. css实现二级导航下拉菜单

    2024-01-18 16:56:01       52 阅读
  9. slint 1.3.2 官方文档翻译06

    2024-01-18 16:56:01       45 阅读
  10. .Net6 记一次RabbitMq消息订阅/发布优化

    2024-01-18 16:56:01       60 阅读
  11. Elasticsearch 多索引条件过滤:字段匹配

    2024-01-18 16:56:01       54 阅读