1018 Public Bike Management (30) Dijkstra算法 + DFS
题目及题解
https://blog.csdn.net/CV_Jason/article/details/81385228
迪杰斯特拉重新认识
两个核心的存储结构:
int dis[n]; //记录每个点到源头的最短距离
bool mark[n]; //标记每个顶点到
/*如果想要保存路径,创建一个 二维数组,或者vector【n】,
里面的每个一维数组表示到达该节点的前一个节点,在(u为当前选出的新节点)当dis[v]==dis[u]+e[u][v],说明通过u到达v的路径也是最短路径,于是把u加入vector【v】;
如果(u为当前选出的新节点)当dis[v]>dis[u]+e[u][v],则说明有更短的路径,于是vector【v】.clean();清空vector【v】,然后加入u
这样任意一点x,(像遍历树一样)只使用dfs/bfs就能把所有从x到源的路径求出;
一个核心公式:
e[a][b]+dis[b]<e[a]; //当通新加入的节点b到达a的路程 ,比已知的到a的路程短,则把dis[a]更新为e[a][b]+dis[b];
流程:
初始化:
dis 设置成inf //自定义无穷
mark 设置成false
dis[0]设置成0 //0可换成任意一点源
执行核心过程:
for(n次,每次加入一个点)
{ 设置两个变量记录每次找的最小的点的 下标和距离
for(n次,找一个未加入的点)
{ 当if(mark【i】==false&&dis【i】<minDis)则更新下标和当前发现的最小距离}
for(n次,检查是否能用新的点更新原来dis【n】)
{}
}
深度优先 复习
外界 stack/vector
dfs(x)
{ s或v push(x)
if(x为最深一层)
{一系列的处理操作}
for(能从x往下走的路)
{ dfx(x+/-1) }
s或v pop;//回溯到没有上一层的x,继续执行上一层for(x的下一条路 )的
}
最新文章
- php编译内容
- 面试题目——《剑指Offer》
- 介绍linux下vi命令的使用
- php 递归函数的三种实现方式
- React Developer Tools 安装小提示
- 关于UIWindow(转)
- 【转】Android开发实践:自定义带消息循环(Looper)的工作线程
- System.getProperties()对应的key/value列表
- Python之添加新元素
- 【源代码】LinkedHashMap源代码剖析
- “HTTP 错误 401.1 - 未授权:登录失败” iis配置和权限问题
- 初识google多语言通信框架gRPC系列(四)C++中使用gRPC
- 【学习笔记】锋利的jQuery(三)事件和动画
- centos/linux下的安装Nginx
- 南阳OJ-14-会场安排问题---区间不相交
- java mysql连接时出现的问题
- ssm登录与退出
- 在Delphi中处理word文档与数据库的互联
- Prufer codes与Generalized Cayley&#39;s Formula
- 查找sqlserver数据库中,查询某值所表名和字段名