最短路

来源:互联网 发布:机房网络管理 编辑:程序博客网 时间:2024/06/05 08:38

迪杰斯克拉:

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;#define maxn 100002#define INF 100000000struct 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 100000000struct 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);}

1 0