首页 > 其他分享 >最短路(10/25)

最短路(10/25)

时间:2023-10-25 22:12:21浏览次数:33  
标签:10 dist idx 25 int 短路 heap ver include

n是点数   m是边数

退优化版的适合点数和边数差不多

(3)适合对边有限制

稠密图用邻接矩阵存

稀疏图用邻接表来存

朴素dijkstra

#include<cstring>
#include<iostream>
using namespace std;
int n,m;
const int N=510;
int g[N][N];//记录点之间的权值
int dist[N];//记录点到原点的最短距离
bool st[N];//距离是否已经走过
int dijkstra()
{
    memset(dist ,0x3f,sizeof dist);//赋值成无穷
    dist[1]=0;//从第一个点开始
    for(int i=0;i<n;i++)
    {
        int t=-1;
        for(int j=1;j<=n;j++)//遍历每个没走过点,找到最近的一个点
            if(!st[j]&&(t==-1||dist[j]<dist[t]))
            t=j;
        st[t]=true;//将该点记录
        for(int j=1;j<=n;j++)//更新所有点的距离
        dist[j]=min(dist[j],dist[t]+g[t][j]);
    }
    if(dist[n]==0x3f3f3f3f) return -1;//0x3f3f3f3f再多就超过32位,溢出导致错误
    else
    return dist[n];
}

int main()
{
    memset(g,0x3f,sizeof g);
    scanf("%d%d",&n,&m);
    int x,y,z;//左点  右点 权值
    while(m--){
       scanf("%d%d%d",&x,&y,&z);
       g[x][y]=min(g[x][y],z);
    }
    printf("%d\n",dijkstra());
    return 0;
}

堆优化版本

priority_queue<PII,vector<PII>,greater<PII>>heap,小分堆定义
引入头文件queue
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef pair<int,int>PII;
int n,m;
const int N=1000010;
int h[N],e[N],ne[N],k[N],idx=0;
int dist[N];//记录点到原点的最短距离
bool st[N];//距离是否已经走过

void add(int a,int b,int c){
    e[idx]=b;k[idx]=c;ne[idx]=h[a];h[a]=idx++;    
}


int dijkstra()
{
    priority_queue<PII,vector<PII>,greater<PII>>heap;//小分堆,最小值自动在最上面
    memset(dist ,0x3f,sizeof dist);//赋值成无穷
    dist[1]=0;//从第一个点开始
    heap.push({0,1});//放第一个值
    while(heap.size())
    {
        auto t=heap.top();
        heap.pop();
        int ver=t.second;int distance=t.first;
        if(st[ver]) continue;//如果遍历过就继续
        st[ver]=true;
        for(int i=h[ver];i!=-1;i=ne[i])//遍历相邻节点,类似广搜
        {
            int j=e[i];
            if(dist[j]>dist[ver]+k[i])//起点加权值如果小于原来大小就更新距离,并加入堆中
            {
                dist[j]=dist[ver]+k[i];
                heap.push({dist[j],j});
            }
        }
    }
    if(dist[n]==0x3f3f3f3f) return -1;//0x3f3f3f3f再多就超过32位,溢出导致错误
    return dist[n];
}

int main()
{
    memset(h,-1,sizeof h);
    scanf("%d%d",&n,&m);
    int x,y,z;//左点  右点 权值
    while(m--){
       scanf("%d%d%d",&x,&y,&z);
       add(x,y,z);
    }
    printf("%d\n",dijkstra());
    return 0;
}

 

标签:10,dist,idx,25,int,短路,heap,ver,include
From: https://www.cnblogs.com/daimazhishen/p/17788089.html

相关文章

  • 配置raid10
    fdisk-l列出磁盘分区表lsblk列出所有可用块设备的信息yuminstallmdadm-y安装raid命令mdadm-Cv/dev/md0-ayes-n4-l10/dev/sde/dev/sdf/dev/sdg/dev/sdh通过命令,把这4个硬盘创建为raid10组fdisk-l/dev/md0列出md0磁盘分区mkfs.xfs/dev/md0格式化文件......
  • 2023.10 做题纪要 #3
    目录2023.10.23P9755[CSP-S2023]种树ABC304ExConstrainedTopologicalSort2023.10.24AGC019EShuffleandSwapAGC017FZigzagCF1827EBusRoutes2023.10.25P8426[JOIOpen2022]放学路(SchoolRoad)P6790[SNOI2020]生成树P9333[JOISC2023Day2]Council2023.10.23CSP......
  • P2573 [SCOI2012] 滑雪
    P2573bzoj#2753一开始以为最优答案就是最短路径树,结果发现是错的首先我们可以观察一下,发现时间胶囊的作用就是回到某个已经经过的节点,显然是一个最小生成树但是这道题还有高度的限制,我们在生成树的时候并不能把所有的边直接按照边权排序,因为这样的话可能会出现一些不合法的边......
  • 大二打卡(10.25)
    今天做了什么:英语课,上节课的听写结果出来了,感觉大学老师就是仁慈,这份听写要是高中,早被老师抽八百遍了,感谢英语老师给个机会,下次听写应该是下下周,这次争取一手满分这次课的听力做的还不错,除了一个单词猜错意思选错了,其他的都听对了 今天遇到什么问题:建民的测试,目前搞定了链接,......
  • 23.10.25(前端页面输入框的各种操作1)
    <tr><%--限制必须输入,学号限制位数、前四位必须是2023,性别限制男或女,专业用下拉框--%><th>姓名</th><inputtype="text"name="name"required><th>学号</th><inputtype="text"name="number"requ......
  • 23.10.25(前端页面输入框的各种操作2)
    <scripttype="text/javascript"><!--全选的方法--><--复选框的定义方法以及全选方法-->functionselectAll(){vars=document.getElementsByName("like");for(vari=0;......
  • jz2440-2023-10-25
    1、一般提到分析kernel的启动流程就要从strart.s入手,这是为什么?线索在哪里?因为烧录kernel时会使用到uImage,所以接下来去找uImage是如何生成的,通过源码顶层Makefile可以找到uImage是从vmlinux得到的,还是在该Makefile,可以找到vmlinux依赖于start.s。2、根据uboot的bootargs命令行参......
  • 10 25
    分页思路SELECT*fromsys_userlimit0,2;--第一页--(2-1)*2=2SELECT*fromsys_userlimit2,2;--第二页--(3-1)*2=4SELECT*fromsys_userlimit4,2;--第三页--结论:limit第一个参数=(pageNum-1)*pageSize//分页查询//接口路径:/use......
  • 10月25每日打卡
    下载commons-csv-1.8.jar网址:commons-csv-1.8.jar下载及Maven、Gradle引入代码,pom文件及包内class-时代Java(nowjava.com) importjava.io.*;importjava.util.ArrayList;importjava.util.List;importjava.util.Random;publicclassMathExercisesCSV{publicsta......
  • 2023.10.25——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.java断言,代码区域等明日计划:学习......