1. 基础


Dijkstra,单源最短路径算法,要求图中无负环。

  • 过程:选点(Black),找周围点(Grey),松弛,选点(Black),找周围点(Grey),松弛,……,直到没有点。

  • 使用邻接表map[maxn][maxn]存储边关系,bool型数组存储颜色 (比如1=white, 0=black/grey),dist[maxn]存储源点到各个点的距离。

  • 通过判断dist[i]是否为INF可以得出该点是grey点还是white点。

  • 拓展周围点时的距离关系:dist[i]=dist[pre]+map[pre][i]

例题1:P1359 租用游艇

裸的dijkstra可以直接过,塔塔露听了都要落泪。甚至代码都没有看的必要。

2. 优化

1)链式前向星

一种存表方式,在代码好写和效率高之间中规中矩。 静态建邻接表,时间效率为O(m),空间效率也为O(m),遍历效率也为O(m)。


2)重载运算符

例如:

struct node {  //定义一个结构体node(节点)int x;int y;int len;   //node中有3个成员变量x,y,leninline bool operator <(const node &a)const {return len<a.len;}
};

重载<操作符。可以对两个node使用<操作符进行比较;括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改。

inline :只有当函数非常短小的时候它才能得到我们想要的效果,如果内联函数不能增强性能,就避免使用它。

在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。关键字inline必须与函数定义放在一起才能使函数成为内联函数,仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现”的关键字,而不是一种“用于声明”的关键字。

3)堆优化

例题是P3371 【模板】单源最短路径(弱化版)

  • 使用priority_queue实现优化。STLyyds
  • 参考:Nemlit的题解
  • 代码:
#include <bits/stdc++.h>
typedef long long LL;
using namespace std;
const int maxn=10005;
const int maxm=500005;
const int INF=0x3f3f3f;
const int outinf=2147483647;int n,m;
bool s[maxn];
LL dis[maxn];
struct Edge{int to;int w;int next;
};Edge edge[maxm];
int head[maxn];
int ctr=0;
void add_edge(int u,int v,int w){ctr++;edge[ctr].to=v;edge[ctr].w=w;edge[ctr].next=head[u];head[u]=ctr;
}//链式向前星存法struct node{int w,now;inline bool operator < (const node &x) const{return w>x.w;}//重载运算符
};priority_queue<node>q;//也可以使用pair结构
void dijkstra(int v0){int MIN=INF+1;dis[v0]=0;//初始化q.push((node){0,v0});//从v0-v0的长度为0的边入队,满足循环的起始条件while(!q.empty()){node x=q.top();//取堆顶边,x是边的编号q.pop();//出队int u=x.now;//u是编号为x的边的终点if(s[u]) continue;//如果该边已涂黑,重来s[u]=1;//涂黑for(int i=head[u];i!=-1;i=edge[i].next){int v=edge[i].to;//编号为i的边,起点为u,终点为vif(dis[v]>dis[u]+edge[i].w){dis[v]=dis[u]+edge[i].w;//松弛q.push((node){dis[v],v});//入队}}}
}
void prepare(){memset(dis,0x3f,sizeof(dis));memset(head,-1,sizeof(head));memset(s,0,sizeof(s));for(int i=1;i<=m;i++) edge[i].w=INF;
}
int main(){int v0; prepare();scanf("%d%d%d",&n,&m,&v0);for(int i=0;i<m;i++){int u,v,w;scanf("%d%d%d",&u,&v,&w);add_edge(u,v,w);}dijkstra(v0);for(int i=1;i<=n;i++){if(dis[i]>=INF) printf("%d ",outinf);//不知道为什么这里写==会卡掉一个解else printf("%lld ",dis[i]);}return 0;
}

塔塔露也能学会的算法(1) | dijkstra从入门到放弃相关推荐

  1. 塔塔露也能学会的算法(2) | 我有背包你有手么

    背包问题 我们手里有个体积为V的背包,一共有k样物品,第i样物品的体积和价值分别为wi和vi. 01背包 每个物体有且只有一件,装还是不装? 对于每个物体i,从V开始倒序计算. 至于倒叙的理由,可以参 ...

  2. 视频编码(压缩)方式/编码(压缩)原理/概念 (转)作者:哈库呐玛塔塔__

    视频数据有极强的相关性,帧与帧之间有大量冗余信息,压缩的本质就是去除这些冗余信息. 压缩的方向: 空间冗余,视频的背景和整体颜色相近并且平稳变化,可以利用帧内编码进行压缩:(无损) 时间冗余,两个视频 ...

  3. 拒做外包行业的“富士康”,看看文思海辉、东软、中软和塔塔都在转向哪里...

    编者按 本文较长,预计阅读时间15分钟.本文分为三个部分,分别是探讨印度服务外包市场.中国服务外包市场,以及当前服务外包市场所面临的困难和挑战.在正文之前,需要说明,服务外包是一个宽泛的名词,指一些企 ...

  4. 起死回生?法拉第未来否认了印度塔塔集团的9亿美元投资

    有外媒报道称,法拉第未来或将得到印度塔塔汽车的融资帮助,投资金额高达9亿美元. 对于大多数民众来说,贾跃亭已经成为茶前饭后的谈资.随着乐视出现资金链断裂.欠债潮.下岗潮,甚至IPO造假的一系列丑闻,乐 ...

  5. 印度塔塔集团在越南建光伏发电站

    印度塔塔集团已考察并决定在越南平福省租用一块200公顷的土地,投资建设经营装机容量100兆瓦的太阳能光伏发电站项目. 目前,印度塔塔集团,越南阿尔法南(Alphanam)集团和越南电力集团均希望在平福 ...

  6. 对话塔塔咨询中国区总裁Suneet Puri:“企业的奋斗目标是创造美好社会”

    近日,塔塔集团创始人贾姆谢特吉·塔塔荣登 EdelGive Hurun 世纪慈善家榜首,超过比尔·盖茨.梅琳达·盖茨和沃伦·巴菲特.塔塔集团有超过150年的历史,旗下子公司塔塔咨询服务(TCS)自20 ...

  7. 常用十大算法 非递归二分查找、分治法、动态规划、贪心算法、回溯算法(骑士周游为例)、KMP、最小生成树算法:Prim、Kruskal、最短路径算法:Dijkstra、Floyd。

    十大算法 学完数据结构该学什么?当然是来巩固算法,下面介绍了十中比较常用的算法,希望能帮到大家. 包括:非递归二分查找.分治法.动态规划.贪心算法.回溯算法(骑士周游为例).KMP.最小生成树算法:P ...

  8. 数学建模算法:Dijkstra(迪杰斯特拉)算法解决你的选择困难症

    是否曾经深陷选择困难症,面对一堆选择而无从是从? 一文学会Dijkstra算法解决你的选择困难症 我们可以把问题实例化为从图中1到5,怎么走是最短路径? 一:Dijkstra算法概述. 二:Dijks ...

  9. AI从入门到放弃:BP神经网络算法推导及代码实现笔记

    作者 | @Aloys (腾讯员工,后台工程师) 本文授权转自腾讯的知乎专栏 ▌一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤 ...

最新文章

  1. 卷积神经网络中用1*1 卷积有什么作用或者好处呢?
  2. HTML中的map标签的使用
  3. 10大主流压力测试工具推荐(转载)
  4. fianl属性 java_在Java中使用Final关键字可以提高性能吗?
  5. Android 第四课 活动的启动模式
  6. 学生档案c语言编程,学生档案管理问题
  7. Java各进制之间的转换
  8. 复习 2 个月拿下大厂 Offer,Java 面试指南带你通关跳槽季
  9. 摄像头系统linux,Linux摄像头编程
  10. 跨域异常与nginx的underscores_in_headers on
  11. 拆分SharePoint 2013 中CreatedModifiedInfo 的时间
  12. java毕业答辩ppt_java网上商城系统毕业设计答辩.ppt
  13. 并发测试工具Jmeter安装与简单使用
  14. idea 运行vue项目
  15. matlab实现图像处理教程,Matlab图像处理入门教程(菜鸟级)
  16. CR渲染器全景图如何渲染颜色通道_CR渲染如何设置渲染AO图和材质通道?
  17. (据说是)鏼爷和吴凯路爷爷出的NOIP模拟神题集锦
  18. iphone苹果二手手机购买前必看
  19. ECharts提示框数字保留两位小数
  20. HALCON图像格式

热门文章

  1. Win10常见问题【Office等】
  2. 简单python爬虫爬取游戏wiki立绘
  3. 「诗人艺术家ll著名诗人」胭脂茉莉十四行诗10首
  4. 腾讯音乐娱乐数据分析4.15笔试
  5. 2018“百度之星”程序设计大赛 - 复赛 1003 带劲的and和(位运算,很好的题)
  6. WEB前端学习 (3)CSS复习二 ( 复合选择器+元素显示模式+ 背景)
  7. java毕业设计融呗智慧金融微资讯移动平台服务端源码+lw文档+mybatis+系统+mysql数据库+调试
  8. php引用字体,thinkphp引入字体文件时候被当做模块求解决问题
  9. 喜报丨酷雷曼成功挂牌北京股权交易中心科技创新板
  10. 为何电脑不识别iPhone