spfa
#include<bits/stdc++.h>
using namespace std;
struct node{
int v,w;
};
vector<node>a[100001];
int dis[100001],in_q[100001];
queue<int>q;
void spfa(int start){
memset(dis,0x3f,sizeof(dis));
memset(in_q,0,sizeof(in_q));
dis[start]=0;
q.push(start);
in_q[start]=1;
while(!q.empty()){
int u,v,w;
u=q.front();
q.pop();
in_q[u]=0;
for (int i=0;i<a[u].size();i++){
v=a[u][i].v;
w=a[u][i].w;
if (dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
if (in_q[v]==0) q.push(v);
}
}
}
}
int main(){
int n,m,start,minn,u,v,w;
cin>>n>>m>>start;
for (int i=1;i<=m;i++){
cin>>u>>v>>w;
node t;
t.v=v;
t.w=w;
a[u].push_back(t);
}
spfa(start);
for (int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
return 0;
}
dijkstra
#include<bits/stdc++.h>
#define P pair<int,int>
using namespace std;
struct node{
int v,w;
};
vector<node>a[100001];
int dis[100001],in_q[100001];
priority_queue<P,vector<P>,greater<P> >q;
void dijkstra(int start){
int u,v,w;
memset(dis,0x3f,sizeof(dis));
memset(in_q,0,sizeof(in_q));
dis[start]=0;
q.push(make_pair(0,start));
while(!q.empty()){
u=q.top().second;
q.pop();
if (in_q[u]==1) continue;
in_q[u]=1;
for (int i=0;i<a[u].size();i++){
v=a[u][i].v;
w=a[u][i].w;
if (dis[v]>dis[u]+w){
dis[v]=dis[u]+w;
q.push(make_pair(dis[v],v));
}
}
}
}
int main(){
ios::sync_with_stdio(false);
int n,m,start,u,v,w;
cin>>n>>m>>start;
for (int i=1;i<=m;i++){
cin>>u>>v>>w;
node t;
t.v=v;
t.w=w;
a[u].push_back(t);
}
dijkstra(start);
for (int i=1;i<=n;i++){
cout<<dis[i]<<" ";
}
return 0;
}
恳请巨佬们帮助