spfa(模板)

来源:互联网 发布:照片识别软件 编辑:程序博客网 时间:2024/06/01 12:11

题目

#include<cstdio>#include<iostream>#include<cmath>#include<algorithm>#include<vector>#include<deque>#include<cstring>using namespace std;struct H{    int cost;//边长    int to; //指向的店};vector<H>w[10001];//动态数组int dis[100001],f[100001],d[100001];int main(){    int m,n,i,j,s;    scanf("%d%d%d",&n,&m,&s);    for(i=1;i<=m;i++)    {        int x,y,k;        scanf("%d%d%d",&x,&y,&k);        H e1;        e1.to=y;        e1.cost=k;        w[x].push_back(e1);    }    for(i=1;i<=n;i++)     dis[i]=2147483647;//最大值    f[s]=1;dis[s]=0;d[1]=s;    int h=0,t=1;    do    {        h++;        int x=d[h];        f[x]=0;        for(i=0;i<w[x].size();i++)//枚举与队首相连接的点,动态数组是在0开始存的        {            int p=w[x][i].to;            if(dis[p]>dis[x]+w[x][i].cost)            {                dis[p]=dis[x]+w[x][i].cost;                if(f[p]==0) d[++t]=p,f[p]=1;//如果此点有更新价值,就入队;            }        }    }while(h<t);    for(i = 1;i <= n;i++)     printf("%d ",dis[i]);    return 0;} 

错误
DI 1:我刚开始将所有的与队首相连的点都入队,导致了re也就是队爆了,其实只有这个点的最短路径值更新了,才有入队的价值;
DI 2:题目中说如果s与一个点不相连,就输出最大值,并且给出了最大值为214748364,也就是赋的初值,我却没有看到这句话,赋的初值为999999999。
mdzz我又犯了老毛病,不看题,不思考。

1 0
原创粉丝点击