用的是Dijkstra算法,本地测评过,想向各位大佬大犇求助
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PR;
const int maxn = 50005;
int n,dis[50005],m;
bool vis[maxn];
struct edge
{
int to;
int v;
};
vector<edge> f[50005];
int dj(int n,int s)
{
for(int i=1;i<=n;i++)
{
dis[i]=2147483637;
vis[i]=false;
}
dis[s]=0;
priority_queue<PR, vector<PR>, greater<PR> > q;
q.push(PR(dis[s], s));
while(!q.empty())
{
int u = q.top().second;
q.pop();
if(vis[u]) continue;
vis[u] = true;
for(int j=0;j<f[u].size();j++)
{
int v=f[u][j].to;
int w=f[u][j].v;
if (!vis[v] && dis[u] + w < dis[v])
dis[v] = dis[u] + w;
q.push(PR(dis[v], v));
}
}
}
int main()
{
ios::sync_with_stdio(false);
int n,s;
cin>>n>>m>>s;
edge tmp;
for(int i=1;i<=m;i++)
{
int x;
cin>>x>>tmp.to>>tmp.v;
f[x].push_back(tmp);
}
dj(n,s);
for(int i=1;i<=n;i++)
cout<<dis[i]<<" ";
}