邻接表实现最短路算法

来源:互联网 发布:python 命令行 编辑:程序博客网 时间:2024/05/16 18:06
<span style="font-family:Courier New;">#include <cstdio>#include <cstring>#include <string>#include <iostream>using namespace std;const int MAXN=1000+5;const int MAXM=100000+5;const int INF=0x7fffffff;struct Edge{    int u,v,w,next;};Edge e[MAXM];int dis[MAXN],vis[MAXN],pre[MAXN];int main(){    int N,M,C,D,K;    while(scanf("%d%d%d%d%d",&N,&M,&C,&D,&K)!=EOF)    {        memset(pre,-1,sizeof(pre));        for(int i=1;i<=M;i++)        {            scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);            e[i].next=pre[e[i].u];            pre[e[i].u]=i;        }        for(int i=1;i<=N;i++)        {            dis[i]=INF;        }        memset(vis,0,sizeof(vis));        dis[C]=0;        for(int t=1;t<=N;t++)        {            int x,m=INF;            for(int j=1;j<=N;j++)            {                if(dis[j]<=m && !vis[j])                {                    x=j;                    m=dis[j];                }            }            vis[x]=1;            for(int j=pre[x];j!=-1;j=e[j].next)            {                if(dis[e[j].v]>dis[e[j].u]+e[j].w)                    dis[e[j].v]=dis[e[j].u]+e[j].w;            }        }        if(dis[D]<=K)            printf("%d\n",dis[D]);        else            printf("Sorry\n");        cout<<INF<<endl;    }    return 0;}</span>

0 0