迪杰斯克拉:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define maxn 100002
#define INF 100000000
struct e{
int b,c;
};
int n,m;
int dis[maxn];
bool pd[maxn];
vector<e>g[maxn];
int main(){
ios::sync_with_stdio(false);
int i,j;
int a,b,c;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>a>>b>>c;
g[a].push_back((e){b,c});
}
for(i=1;i<=n;i++)dis[i]=INF;
dis[1]=0;
pd[1]=1;
for(i=0;i<g[1].size();i++){
dis[g[1][i].b]=g[1][i].c;
}
int minn=INF,k;
for(i=1;i<=n-1;i++){
k=0;minn=INF;
for(j=1;j<=n;j++){
if(minn>dis[j]&&!pd[j]){
minn=dis[j];
k=j;
}
}
if(k==0)break;
pd[k]=1;
for(j=0;j<g[k].size();j++){
e x=g[k][j];
if(dis[k]+x.c<dis[x.b]){
dis[x.b]=dis[k]+x.c;
}
}
}
cout<<dis[n];
return(0);
}
spfa:
%拜神犇lcy
//优先队列sillyB 修炼得永生
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define maxn 100002
#define INF 100000000
struct e{
int b,c;
};
int n,m;
int dis[maxn];
vector<e>g[maxn];
int main(){
ios::sync_with_stdio(false);
int i,j;
int a,b,c;
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>a>>b>>c;
g[a].push_back((e){b,c});
}
for(i=1;i<=n;i++)dis[i]=INF;
dis[1]=0;
priority_queue<pair<int,int> >q;
q.push(make_pair(0,1));
while(q.size()){
int u=q.top().second;
q.pop();
for(i=0;i<g[u].size();i++){
e & x=g[u][i];
if(dis[x.b]>dis[u]+x.c){
dis[x.b]=dis[u]+x.c;
q.push(make_pair(-dis[x.b],x.b));
}
}
}
cout<<dis[n];
return(0);
}