<最短路模板> 热浪

来源:互联网 发布:js除法取整不四舍五入 编辑:程序博客网 时间:2024/06/16 21:45

go to the problem

模板题还写什么题解QWQ

dijkstra(贪心)

#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int t,c,ts,te,rs,re;int a[3000][3000];int d[3000];bool used[3000];const int inf=1047483647; int main(){    cin>>t>>c>>ts>>te;    for(int i=1;i<=t;++i)       for(int j=1;j<=t;++j)            a[i][j]=inf;    for(int i=1;i<=c;++i)    {        cin>>rs>>re;        cin>>a[rs][re];        a[re][rs]=a[rs][re];    }    memset(d,63,sizeof(d));    d[ts]=0;    for(int j=1;j<=t;++j)    {        int sum=inf,k=0;        for(int i=1;i<=t;++i) // 找出未被弹出的d最小的点        {            if((!used[i])&&(d[i]<sum))            {                sum=d[i];                k=i;            }        }        if(k==0) break;        for(int i=1;i<=t;++i) 用这个点去更新其他点        {            if(d[k]+a[k][i]<d[i])              d[i]=d[k]+a[k][i];        }        used[k]=true;    }    cout<<d[te];    return 0;}

dijkstra+堆优化

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;int T,C,f,t,d,ts,te,cnt;int first[2510],next[13000],de[2510];bool used[2510];struct maple{    int f,t,d;}Rode[13000];struct Edge{    int f,d;    bool operator <(const Edge &a)const{       return a.d<d;    }};priority_queue<Edge>  q;void build(int f,int t,int d){    Rode[++cnt]=(maple){ f,t,d};    next[cnt]=first[f];    first[f]=cnt;}int main(){    scanf("%d%d%d%d",&T,&C,&ts,&te);    for(int i=1;i<=C;++i)    {        scanf("%d%d%d",&f,&t,&d);        build(f,t,d);        build(t,f,d);    }    q.push((Edge){ ts,0 });    memset(de,63,sizeof(de));    de[ts]=0;    while(!q.empty())    {        Edge a=q.top();        q.pop();        while(!q.empty()&&used[a.f]) a=q.top(),q.pop();        used[a.f]=1;        if(a.f==te)         {            cout<<a.d;            break;        }        for(int i=first[a.f];i;i=next[i])            if(!used[Rode[i].t]&&a.d+Rode[i].d<de[Rode[i].t])            {                de[Rode[i].t]=a.d+Rode[i].d;                q.push((Edge){Rode[i].t,de[Rode[i].t]});            }    }    return 0;}

SPFA

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<queue>using namespace std;const int MAXN=100010;int T,C,ts,te,cnt,x,y,z;int first[MAXN],next[MAXN],de[MAXN];bool used[MAXN];struct Edge{    int f,e,d;}rode[MAXN];queue<int> q;void build(int f,int t,int d){    rode[++cnt]=(Edge){ f,t,d};    next[cnt]=first[f];    first[f]=cnt;}void go(){    while(!q.empty())    q.pop();    q.push(ts);    de[ts]=0;    used[ts]=1;    while(!q.empty())    {        int v=q.front();        q.pop();        used[v]=0;        for(int i=first[v];i!=-1;i=next[i])        {            int u=rode[i].e;            if(de[u]>(de[v]+rode[i].d))            {                de[u]=de[v]+rode[i].d;                  if(!used[u])                {                   q.push(u);                   used[u]=1;                }            }        }    }}int main(){    memset(first,-1,sizeof(first));    memset(next,-1,sizeof(next));    memset(used,0,sizeof(used));    memset(de,63,sizeof(de));    scanf("%d%d%d%d",&T,&C,&ts,&te);    for(int i=1;i<=C;++i)    {        scanf("%d%d%d",&x,&y,&z);        build(x,y,z);        build(y,x,z);    }    go();    printf("%d",de[te]);    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机外屏幕失灵怎么办 6p手机屏幕失灵怎么办 home键指纹失灵怎么办 小米触屏不灵敏怎么办 vivo手机音量小怎么办 iphone尾插松动怎么办 充电头接触不良怎么办 苹果充电口松动怎么办 苹果手机速度慢怎么办 苹果6手机屏幕失灵怎么办 手机膜有静电怎么办 手机充电带静电怎么办 苹果6锁屏键坏了怎么办 ipad触摸屏乱点怎么办 6p屏幕失灵怎么办 iphone屏幕压伤怎么办 笔记本光标不动了怎么办 电脑光标不动了怎么办 苹果六按键失灵怎么办 iphone屏幕碎了怎么办 oppo手机内屏坏了怎么办 手机充电变慢怎么办 手机内屏分离怎么办 电脑屏幕摔碎了怎么办 三星手机外屏碎了怎么办 苹果手机外屏碎了怎么办 iphone6s听筒坏了怎么办 苹果x外屏碎了怎么办 苹果手机屏摔坏了怎么办 苹果8外屏摔碎了怎么办 苹果7内屏坏了怎么办 苹果手机屏幕里面有水痕怎么办 iphone6屏幕摔裂怎么办 苹果手机电池坏了怎么办 苹果手机充电器坏了怎么办 苹果充电器老是坏怎么办 苹果手机屏幕失控了怎么办 手机自己乱点怎么办 手机点屏幕没用怎么办 手机界面不动了怎么办 手机关不了机怎么办