dijkstra

dijkstra,第1张

dijkstra

算法】最短路径查找—Dijkstra算法_哔哩哔哩_bilibili

#include
#include
using namespace std ;

const int N = 510 ;
bool st[N] ;
int g[N][N] ;
int d[N] ;
int n , m ;

int dijkstra()
{
    memset(d , 0x3f , sizeof d) ;
    d[1] = 0 ;
    for(int i = 0 ; i < n ; i++)
    {
        int t = -1 ;
        for(int j = 1 ; j <= n ; j++)
        {
            if(!st[j] && (t == -1 || d[t] > d[j])) t = j ;
        }
        st[t] = true ;
        for(int j = 1 ; j <= n ; j++)
        {
            if(!st[j] && d[t] + g[t][j] < d[j]) d[j] = d[t] + g[t][j] ;
        }
    }
    if(d[n] == 0x3f3f3f3f) return -1 ;
    return d[n];
}
int main()
{
    cin >> n >> m ;
    memset(g , 0x3f , sizeof g) ;
    while(m--)
    {
        int a , b , c ;
        cin >> a >> b >> c ;
        g[a][b] = min(g[a][b] , c) ;
    }
    cout << dijkstra() ;
    return 0 ;
}
#include
#include
#include
#include

using namespace std ;

typedef pair PII ;
const int N = 1e5 + 10 ;
int h[N] , e[N] , ne[N] , idx ;
int d[N] , w[N] ;
bool st[N] ;
int n , m ;

void add(int a , int b ,int c)
{
    e[idx] = b , w[idx] = c , ne[idx] = h[a] , h[a] = idx++ ;
}
int dijkstra()
{
    memset(d , 0x3f , sizeof d) ;
    priority_queue(PII , vector , greater) heap ;
    d[1] = 0 ;
    heap.push({0,1}) ;
    while(heap.size())
    {
        auto t = heap.top() ;
        heap.pop() ;
        int x = t.first , y = t.second ;
        if(st[y]) continue ;
        st[y] = true ;
        for(int i = h[y] ; i!= -1 ; i = ne[i])
        {
            int j = e[i] ;
            if(x + w[j] < d[j]) d[j] = x + w[j] ;
            heap.push({d[j] , j}) ;
        }
    }
    if(d[n] == 0x3f3f3f3f) return -1 ;
    return d[n] ;
}

int main()
{
    cin >> n >> m ;
    for(int i = 0 ; i < m ; i++)
    {
        int a , b , c ;
        cin >> a >> b >> c ;
        add(a,b,c) ;
    }
    cout << dijkstra() ;
    return 0 ;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存