HDU 2544 最短路 SPFA 邻接表 模板

HDU 2544 最短路 SPFA 邻接表 模板

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

HDU 2544 最短路 SPFA 邻接表 模板此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

Problem Description
在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt。可是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以如今他们想要寻找最短的从商店到赛场的路线,你能够帮助他们吗?

 

Input
输入包含多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包含3个整数A,B,C(1<=A,B&lt;=N,1<=C<=1000),表示在路口A与路口B之间有一条路,我们的工作人员须要C分钟的时间走过这条路。

输入保证至少存在1条商店到赛场的路线。

 

Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
 

Sample Input
   
   
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0

 

Sample Output
   
   
3 2 代码:
<pre name="code" class="cpp">#include<iostream>
#include<cstdio>
#include<cstring>
#define maxx 99999999
#include<queue>
using namespace std;
struct node{
   int to,w;
   int pre;  //表示 同一起点的前一条边
}edge[20005];
int vis[505],dis[505];
int next[20005];
int m,n;
int tot;
void addedge(int u,int v,int w)
{
    int j,t=0;
    for(j=next[u];j!=-1;j=edge[j].pre)   //去重边
    {
        if(v==edge[j].to&&w>=edge[j].w)
        {
            t=1;
            break;
        }
    }
    if(t==1)
        return;
    edge[tot].to=v;
    edge[tot].w=w;
    edge[tot].pre=next[u];//  邻接表的存储
    next[u]=tot++;       //
    edge[tot].to=u;  //构造反向边
    edge[tot].w=w;
    edge[tot].pre=next[v];
    next[v]=tot++;
    return;
}
int spfa()
{
    queue<int>q;
    int now;
    for(int i=1;i<=m;i++)
    {
        vis[i]=0;
        dis[i]=maxx;
    }
    dis[1]=0;
    vis[1]=1;
    q.push(1);
    while(!q.empty())
    {
        now=q.front();
        q.pop();
        vis[now]=0;        //反向边
        for(int i=next[now];i!=-1;i=edge[i].pre)  //遍历同一起点的全部边(从最后一条边開始)
        {
            int v=edge[i].to;
            if(dis[v]>dis[now]+edge[i].w)
            {
                dis[v]=dis[now]+edge[i].w;
                if(!vis[v])
                {
                    vis[v]=1;
                    q.push(v);
                }
            }
        }
    }
    return dis[m];
}
int main()
{
    while(~scanf("%d%d",&m,&n))
    {
        if(m==0&&n==0)
        break;
        tot=1;
        memset(next,-1,sizeof(next));
        while(n--)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            addedge(a,b,c);
        }
        int s=spfa();
        cout<<s<<endl;
    }
    return 0;
}


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117984.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Windows系统好用的文本编辑器[通俗易懂]

    Windows系统好用的文本编辑器[通俗易懂]文章目录Windows系统好用的文本编辑器建议notepad3notepad++EmEditorsublimetext3vscodeWindows系统好用的文本编辑器win上默认的编辑器中文名叫[记事本],英文是[notepad],功能很弱…不知道为什么有的人说功能强大,明明撤回功能都只能返回一步的。目前win上有很多好用的编辑器,我只是用了几种,推荐顺便分析一下.链接:https://pan.baidu.com/s/1ZTfl6JtU11_1zuBnspoqYQ提取码:kpth通用优

  • 联想笔记本电脑键盘灯怎么开启_联想笔记本电脑的键盘背光怎么打开[通俗易懂]

    联想笔记本电脑键盘灯怎么开启_联想笔记本电脑的键盘背光怎么打开[通俗易懂]展开全部1、联想笔记本部分型号具备键盘背光功能,方法通过“FN+空格”打开,支持62616964757a686964616fe78988e69d8331333431336664此功能的机型,键盘上有相应标示。部分早期的Thinkpad笔记本电脑若带有键盘灯,需要通过“Fn+PageUp”组合键开启。发现电脑键盘的“Space(空格键)”按键上有下图所示的标识符号电脑一般带有键盘背光,使用”Fn+…

  • QQ群关系可视化3D查询搭建[通俗易懂]

    QQ群关系可视化3D查询搭建[通俗易懂]一、配置数据库(需要300GB以上磁盘剩余空间)下载并安装SqlServer2008R2,配置好用户名以及登录密码,如果远程连接数据库的话,需配置数据库允许远程登录(SqlServer数据库配置请自行

  • Spring Boot Vue全栈开发实战_java web前端

    Spring Boot Vue全栈开发实战_java web前端构建SpringBoot项目并通过登录DEMO打通前后端的联系,为下一步开发打下基础。

    2022年10月12日
  • Django(47)drf请求生命周期分析

    Django(47)drf请求生命周期分析前言一般我们写完序列化以后,我们就会开始写视图了,drf中我们一般使用CBV的方式,也就是类视图的方式,最基础的我们会使用fromrest_framework.viewsimportAPIVi

  • ideal 2021.2 永久激活(已测有效)

    ideal 2021.2 永久激活(已测有效),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号