dijkstra 向各位大佬求助(只有70分 哭了
查看原帖
dijkstra 向各位大佬求助(只有70分 哭了
609967
kuokuo楼主2022/2/15 15:37
#include <iostream>
#include <cstring>
#include <queue>
#define l first
#define r second

using namespace std;
const int N =1e5+10;
typedef pair<int,int> PII;

int n,m,tt;
int ne[N],e[N],h[N],idx,w[N];
bool st[N];
int dist[N];

void add(int a, int b ,int c)
{
    e[idx] = b,w[idx] = c,ne[idx] = h[a],h[a] = idx++;
}

void dijkstra()
{
    memset(dist , 0x3f , sizeof dist);
    dist[tt] = 0;
    priority_queue<PII,vector<PII>,greater<PII>> q;
    
    q.push({0,tt});
    while( q.size() )
    {
        auto t = q.top();
        q.pop();

        int pos = t.r , distance = t.l ;

        if(st[pos]) continue;
        st[pos] = true;
        for( int i = h[pos] ; i != -1 ; i = ne[i] )
        {
            int j = e[i];
            if( dist[j] > dist[pos] + w[i] )
            {
                dist[j] = dist[pos] + w[i];
                q.push({dist[j],j});
            }
        }
    }

}
int main()
{
    memset(h , -1 , sizeof h);
    scanf("%d%d%d",&n,&m,&tt);
    for( int i = 0 ; i < m ; i++ )
     {
         int a,b,c;
         scanf("%d%d%d",&a,&b,&c);
         add(a,b,c);
     }
    dijkstra();
    for( int i = 1 ; i <= n ; i++ )
     {
         if( dist[i] == 0x3f3f3f3f ) printf("%d ",2147483647);
         else printf("%d " , dist[i] );
     }
    return 0;
}
2022/2/15 15:37
加载中...