最短路专题+dijkstra 重边

题目链接:https://vjudge.net/contest/281858#problem/A
题目大意:给了一个无向图,输入t和n, t代表几个顶点,n代表问的是从第一个顶点到第n的顶点的最短距离,各种最短路算法的模板题

唯一的坑点:有重边,对dijkstra的邻接表来说,不用考虑。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <functional>
#include <map>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <cmath>
#include <set>
#define ll long long
using namespace std;
const int maxn=1005;

vector< pair<int ,int > > e[maxn];
int n, m;
int dis[maxn];   //dis当前的最短路
int vis[maxn];

priority_queue<pair<int, int> > q;
int dijkstra(int s, int t)
{
    while(!q.empty())
    {
        q.pop();
    }
    dis[s]=0;
    q.push(make_pair(-dis[s], s));

    while(!q.empty())
    {
        int now=q.top().second;                //一定是最短路上的顶点
        q.pop();
        if(vis[now])
        {
            continue;
        }
        vis[now]=1;
        for(int i=0;i<e[now].size();i++)       //访问所有的邻接点
        {
            int v=e[now][i].first;
            if(!vis[v]&&dis[v]>dis[now]+e[now][i].second)
            {
                dis[v]=dis[now]+e[now][i].second;
                q.push(make_pair(-dis[v], v));//把可能的最短路顶点加入队列
            }
        }
    }
    if(dis[t]==1e9)
    {
        return -1;                            //s-t没有通路
    }
    else
    {
        return dis[t];
    }

}

int main()
{
    scanf("%d%d",&m,&n);
    for(int i=0;i<maxn;i++)   //初始化
    {
        vis[i]=0;
        dis[i]=1e9;
        e[i].clear();
    }

    for(int i=0;i<m;i++)
    {
        int x, y, z;
        scanf("%d%d%d",&x,&y,&z);
        e[x].push_back(make_pair(y ,z));
        e[y].push_back(make_pair(x ,z));
    }
    printf("%d\n",dijkstra(1, n));

    return 0;
}
全部评论

相关推荐

不想上班的肱二头肌很...:简历一页,项目突出重点,自我评价可以删掉的
点赞 评论 收藏
分享
后端实习中的&nbsp;“好需求”,核心定义是能支撑面试深度讨论、可向外延伸多维度知识点的需求——&nbsp;本质是能让你在面试官拷打时,有足够空间展现技术积累、解决问题的能力,而非仅完成简单&nbsp;CRUD。结合面试反推逻辑,具体可分为三类,且都具备&nbsp;“可延伸、有讨论点”&nbsp;的共性。本质上是这个需求要支撑你能给面试官吹牛逼。典型的垃圾需求:或许有的同学可能还不理解什么叫做可以吹牛逼的需求,我举一个最简单的反例,很多同学写苍穹外卖的时候,总爱把一个需求写到简历上:&nbsp;&nbsp;基于OSS处理用户上传图片,获取OSS返回URL,实现用户远程上传图片。这就是个最典型的垃圾需求。因为你发现论代码链路,他没什么可讲的。论各种新潮技术,他也...
反装笔大队长:分情况吧。需求分业务需求和技术需求,技术需求你说的是对的。像CRM、OA、NC等等,这些业务系统很多时候对技术要求并不高的,不可否认的是 这些需求还是很不错的。 NC系统的进销存。实际上只是对仓库、库位、库存量、入库出库单价、数据报表等数据的统计与计算。CRM的市场活动、人面画像分析与统计、客户信息管理等,这些无非都是一些增删改查。对于业务需求面试官通常都是问你对业务的理解与过往对该业务的处理方案,并不会死磕技术。技术肯定是多多益善,但在业务开发中 正在有意义的是你的经历。
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务