OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3060|回复: 0

dijkstra堆优化模板 收藏方便找到该网站

[复制链接]

143

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
585
金钱
585
注册时间
2020-5-25
在线时间
42 小时
发表于 2020-9-1 15:47:01 | 显示全部楼层 |阅读模式
#include<bits/stdc++.h>using namespace std;int xx,yy,vv,dis[510],len=0,lin[510],T,n,m;bool vis[510];struct one{    int y,v,next;};one e[20100];//priority_queue < pair < int , int > , vector<int> , greater<int> > q;priority_queue < pair < int , int > > q;void insert(){    e[++len].y=yy;e[len].v=vv;    e[len].next=lin[xx];lin[xx]=len;}int main(){    //freopen("xf.in","r",stdin);    //freopen("xf.out","w",stdout);    scanf("%d%d%d",&T,&n,&m);    for(int i=1;i<=m;i++)    {        scanf("%d%d%d",&xx,&yy,&vv);        insert();swap(xx,yy);insert();    }    memset(vis,false,sizeof(vis));    memset(dis,0x3f,sizeof(dis));    dis[1]=0;    q.push(make_pair(0,1));    while(q.size())    {        int x=q.top().second;q.pop();        if(vis[x])continue;         vis[x]=true;        for(int i=lin[x];i;i=e.next)        {            if(dis[e.y]>dis[x]+e.v)            {                dis[e.y]=dis[x]+e.v;                q.push(make_pair(-dis[e.y],e.y));            }        }    }    int sum=0;    for(int i=1;i<=n;i++)printf("%d\n",dis);    return 0;}/*#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<iomanip>#include<cmath>using namespace std;int t,f,p,x[510][510],dis[11000],vis[11000],sum=0;void dijkstra(int st){    for(int i=1;i<=f;i++) dis=x[st];    memset(vis,0,sizeof(vis));    vis[st]=1;dis[st]=0;    for(int i=2;i<=f;i++)    {        int minn=999999999;        int k=0;        for(int j=1;j<=f;j++)            if(vis[j]==0&&dis[j]<minn)            {                minn=dis[j];                k=j;            }            if(k==0) return;            vis[k]=1;            for(int j=1;j<=f;j++)            {                if(vis[j]==0&&dis[k]+x[k][j]<dis[j])                {                    dis[j]=dis[k]+x[k][j];                }            }    }    }int main(){    memset(dis,9,sizeof(dis));    memset(x,9,sizeof(x));    scanf("%d%d%d",&t,&f,&p);    for(int i=1;i<=p;i++)    {        int a,b,c;        scanf("%d%d%d",&a,&b,&c);        if(x[a]>c)        {        x[a]=c;        x[a]=c;        }    }    dijkstra(1);    for(int i=1;i<=f;i++)        if(dis<=t) sum++;    cout<<sum<<endl;    return 0;}*/ 有相同爱好的可以进来一起讨论哦:企鹅群号:1046795523

学习视频资料:http://www.makeru.com.cn/live/1392_1164.html?s=143793


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 11:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表