题目及题解

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的下一条路 )的

}

最新文章

  1. php编译内容
  2. 面试题目——《剑指Offer》
  3. 介绍linux下vi命令的使用
  4. php 递归函数的三种实现方式
  5. React Developer Tools 安装小提示
  6. 关于UIWindow(转)
  7. 【转】Android开发实践:自定义带消息循环(Looper)的工作线程
  8. System.getProperties()对应的key/value列表
  9. Python之添加新元素
  10. 【源代码】LinkedHashMap源代码剖析
  11. “HTTP 错误 401.1 - 未授权:登录失败” iis配置和权限问题
  12. 初识google多语言通信框架gRPC系列(四)C++中使用gRPC
  13. 【学习笔记】锋利的jQuery(三)事件和动画
  14. centos/linux下的安装Nginx
  15. 南阳OJ-14-会场安排问题---区间不相交
  16. java mysql连接时出现的问题
  17. ssm登录与退出
  18. 在Delphi中处理word文档与数据库的互联
  19. Prufer codes与Generalized Cayley&#39;s Formula
  20. 查找sqlserver数据库中,查询某值所表名和字段名

热门文章

  1. vue+窗格切换+田字+dicom显示_01
  2. 学习笔记:SASS
  3. shell文件测试,菜单表示思想
  4. RGB颜色值转化为long 型数字
  5. 1.MySQL基础
  6. 常用的OO设计原则
  7. jQuery之动画
  8. python虚拟环境的搭建
  9. Chrome浏览器 调试工具 vue-devtools 的安装和使用
  10. [leetcode]200. Number of Islands岛屿个数