数据结构第八周笔记——图(下2)(慕课浙大版本--XiaoYu)

简介: 图之习题选讲

图之习题选讲-旅游规划

图习题.1 核心算法

题意理解

  1. 城市为结点
  2. 公路为边
  1. 权重1:距离
  2. 权重2:收费

网络异常,图片无法展示
|
红色是起点,蓝色是终点。;绿色字体是距离,紫色字体是收费

  1. 单源最短路
  1. Dijkstra算法 ——距离 (一个结点一个结点往那个集合里面去收集,每收进来一个就要检查以下其他结点距离有没有被新进来的结点影响,得到更短的距离就刷新掉,得不到就保持原样)
  2. 等距离时按收费更新

核心算法

最基础版本的Dijkstra算法

voidDijkstra( Vertexs )

{

   while(1){

       V=未收录顶点中dist最小者;

       if( 这样的V不存在 )

           break;

       collected[V] =true;

       for( V的每个邻接点W )

           if( dist[V] +E<v,w><dist[W] ){//Vd点的加入使我们得到一个更短的w的距离

               dist[W] =dist[V] +E<v,w>;//更新距离

               path[W] =V;//更新最短路径

           }

   }

}

根据基础进行改良过后的

最基础版本的Dijkstra算法

voidDijkstra( Vertexs )

{

   while(1){

       V=未收录顶点中dist最小者;

       if( 这样的V不存在 )

           break;

       collected[V] =true;

       for( V的每个邻接点W )

           if( dist[V] +E<v,w><dist[W] ){//Vd点的加入使我们得到一个更短的w的距离

               dist[W] =dist[V] +E<v,w>;//更新距离

               path[W] =V;//更新最短路径,s走到V的所有费用加上V走到W这条边的费用

           }

       elseif((dist[V]+E<v,w>==dist[W]) && (cost[V] +C<v,w><cost[W])){//等长最短路径并且这条路径上面的新费用比原来的费用小的话那也要更新路径

           cost[W] =cost[V] +C<v,w>;//更新费用

           path[w] =V;//更新路径

       }

   }

}

图习题.2 其他推广

其他类似问题

  1. 要求最短路径有多少条?
  1. count[s] = 1;//计数器的作用
  2. 在要求数最短路径有多少条的问题中,如果找到更短路,则count[W]应该更新为要求边数最少的最短路:count[W]=count[V]
  3. 在要求数最短路径有多少条的问题中,如果找到等长路,则count[W]应该更新为:count[W]+=count[V]
  1. 要求边数最少的最短路
  1. 费用初始化怎么做?初始化为0
  2. count[s] = 0;
  3. 如果找到更短路:count[W]  = count[V] + 1;
  4. 如果找到等长路:count[W] = count[V] + 1;//count[V]加上新的权重
目录
相关文章
|
6月前
|
存储 算法
数据结构===图
数据结构===图
|
5月前
|
算法 Python
逆袭之路!用 Python 玩转图的 DFS 与 BFS,让数据结构难题无处遁形
【7月更文挑战第12天】图的遍历利器:DFS 和 BFS。Python 中,图可表示为邻接表或矩阵。DFS 沿路径深入,回溯时遍历所有可达顶点,适合找路径和环。BFS 层次遍历,先近后远,解决最短路径问题。两者在迷宫、网络路由等场景各显神通。通过练习,掌握这些算法,图处理将游刃有余。
67 3
|
5月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
52 1
|
6月前
|
存储 算法
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
【单向链表】数据结构——单向链表的介绍与代码实现&笔记
|
6月前
|
存储 算法
【树】数据结构——树和二叉树的概念&笔记
【树】数据结构——树和二叉树的概念&笔记
|
6月前
|
算法 Java 索引
12.12_黑马数据结构与算法笔记Java
12.12_黑马数据结构与算法笔记Java
54 1
|
5月前
|
存储 算法 C语言
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
软考中级之数据库系统工程师笔记总结(二)数据结构与算法
42 0
|
6月前
|
存储 算法 Linux
【内核链表】数据结构——深入理解内核链表的概念和操作&笔记
【内核链表】数据结构——深入理解内核链表的概念和操作&笔记
【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记
【循环链表】数据结构——单向循环链表和双向循环链表操作&笔记
|
6月前
|
存储
数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)
数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)
102 0