四平公司做网站wordpress 字体定义

张小明 2026/3/2 16:31:18
四平公司做网站,wordpress 字体定义,海南建设培训网站,宁波自助建站公司本文献给#xff1a; 已掌握无向图基础#xff0c;希望理解如何在带权图中找到两点间最短路径的C语言学习者。本文将系统讲解两种经典的最短路径算法。 你将学到#xff1a; 最短路径问题的定义与核心概念Dijkstra算法#xff1a;解决单源、非负权图的最短路径Bellman-For…本文献给已掌握无向图基础希望理解如何在带权图中找到两点间最短路径的C语言学习者。本文将系统讲解两种经典的最短路径算法。你将学到最短路径问题的定义与核心概念Dijkstra算法解决单源、非负权图的最短路径Bellman-Ford算法处理单源、含负权边的最短路径算法对比与实战应用目录第一部分问题定义与核心概念1. 什么是最短路径第二部分图的存储带权图第三部分Dijkstra算法1. 核心思想2. 算法步骤朴素O ( ∣ V ∣ 2 ) O(|V|^2)O(∣V∣2)实现/b3. C语言实现第四部分Bellman-Ford算法1. 核心思想2. 算法步骤3. C语言实现第五部分总结与对比算法对比表选择指南第一部分问题定义与核心概念1. 什么是最短路径在带权无向图G ( V , E , w ) G (V, E, w)G(V,E,w)中w : E → R w: E \rightarrow \mathbb{R}w:E→R为边权函数。从源点s ss到目标t tt的路径P ( s , v 1 , . . . , v k , t ) P (s, v_1, ..., v_k, t)P(s,v1​,...,vk​,t)的长度为路径上所有边权之和d i s t ( P ) ∑ i 0 k w ( v i , v i 1 ) dist(P) \sum_{i0}^{k} w(v_i, v_{i1})dist(P)i0∑k​w(vi​,vi1​)最短路径是所有s ss到t tt路径中长度最小的路径。关键术语单源最短路径求从一个源点s ss到图中所有其他顶点的最短距离。权值可正、可负实际问题中常为非负如距离、时间、成本。松弛操作最短路径算法的核心操作通过考察一条边来更新当前的最短距离估计。第二部分图的存储带权图在基础邻接矩阵/邻接表上需要增加权值信息。#defineMAX_V100#defineINF0x3f3f3f3f// 表示“无穷大”的一个较大数值// 邻接矩阵带权typedefstruct{intmatrix[MAX_V][MAX_V];// 存储权值INF表示无边intvertex_count;}GraphMatrixWeighted;voidinit_graph_weighted(GraphMatrixWeighted*g,intn){g-vertex_countn;for(inti0;in;i){for(intj0;jn;j){g-matrix[i][j](ij)?0:INF;// 自身距离为0}}}voidadd_edge_weighted(GraphMatrixWeighted*g,intu,intv,intweight){if(ug-vertex_count||vg-vertex_count)return;g-matrix[u][v]weight;g-matrix[v][u]weight;// 无向图}第三部分Dijkstra算法1. 核心思想贪心策略。维护一个集合S SS包含已确定最短距离的顶点。每次从未确定的顶点中选择距离源点s ss最近的顶点u uu加入S SS并用u uu来松弛其所有邻居的距离。要求所有边权非负。算法正确性依赖当边权非负时当前未确定顶点中距离最小的顶点其距离不可能再被其他未确定的顶点更新减小。2. 算法步骤朴素O ( ∣ V ∣ 2 ) O(|V|^2)O(∣V∣2)实现初始化dist[s] 0dist[v] INFv ≠ svisited[v] false。循环|V|次a. 找到未访问顶点中dist最小的顶点u。b. 标记u为已访问 (visited[u] true)。c.松弛操作对u的每个邻居v如果dist[u] w(u, v) dist[v]则更新dist[v] dist[u] w(u, v)。循环结束dist[]数组即为源点到各点的最短距离。3. C语言实现// Dijkstra算法 (邻接矩阵朴素实现)voiddijkstra(GraphMatrixWeighted*g,intsrc,intdist[]){intvisited[MAX_V]{0};// 初始化for(inti0;ig-vertex_count;i){dist[i]INF;}dist[src]0;for(intcount0;countg-vertex_count;count){// 步骤1: 找到未访问的dist最小顶点intu-1;intmin_distINF;for(intv0;vg-vertex_count;v){if(!visited[v]dist[v]min_dist){min_distdist[v];uv;}}if(u-1)break;// 剩余顶点不可达visited[u]1;// 步骤2: 松弛u的所有邻居for(intv0;vg-vertex_count;v){if(!visited[v]g-matrix[u][v]!INF){intnew_distdist[u]g-matrix[u][v];if(new_distdist[v]){dist[v]new_dist;}}}}}算法复杂度时间复杂度O ( ∣ V ∣ 2 ) O(|V|^2)O(∣V∣2)适合稠密图。空间复杂度O ( ∣ V ∣ ) O(|V|)O(∣V∣)。优化方向使用**优先队列最小堆**可将时间复杂度降为O ( ( ∣ V ∣ ∣ E ∣ ) log ⁡ ∣ V ∣ ) O((|V||E|) \log |V|)O((∣V∣∣E∣)log∣V∣)适合稀疏图。第四部分Bellman-Ford算法1. 核心思想动态规划/松弛。通过对所有边进行∣ V ∣ − 1 |V|-1∣V∣−1轮松弛操作逐步逼近最短路径。可以处理负权边并能检测出图中是否存在从源点可达的负权环。原理在无负权环的图中任意两点间的最短路径最多包含∣ V ∣ − 1 |V|-1∣V∣−1条边。因此通过∣ V ∣ − 1 |V|-1∣V∣−1轮全局松弛足以找到所有最短路径。2. 算法步骤初始化dist[s] 0dist[v] INFv ≠ s。进行∣ V ∣ − 1 |V|-1∣V∣−1轮迭代每轮遍历图中的所有边( u , v ) (u, v)(u,v)。对每条边执行松弛操作如果dist[u] w(u, v) dist[v]则更新dist[v] dist[u] w(u, v)。负权环检测再进行一轮所有边的遍历。如果仍有边能被松弛则说明图中存在从源点可达的负权环最短路径无意义。3. C语言实现// Bellman-Ford算法 (使用边列表存储图更合适此处为演示使用邻接矩阵遍历所有边)voidbellman_ford(GraphMatrixWeighted*g,intsrc,intdist[]){// 初始化for(inti0;ig-vertex_count;i){dist[i]INF;}dist[src]0;// 步骤1: 进行 |V|-1 轮松弛for(inti0;ig-vertex_count-1;i){// 遍历所有边 (u, v)for(intu0;ug-vertex_count;u){for(intv0;vg-vertex_count;v){if(g-matrix[u][v]!INF){// 存在边intnew_distdist[u]g-matrix[u][v];if(new_distdist[v]){dist[v]new_dist;}}}}}// 步骤2: 检测负权环 (可选如果需要检测)for(intu0;ug-vertex_count;u){for(intv0;vg-vertex_count;v){if(g-matrix[u][v]!INFdist[u]g-matrix[u][v]dist[v]){printf(图中存在从源点可达的负权环\n);return;}}}}算法复杂度时间复杂度O ( ∣ V ∣ ⋅ ∣ E ∣ ) O(|V| \cdot |E|)O(∣V∣⋅∣E∣)使用邻接矩阵为O ( ∣ V ∣ 3 ) O(|V|^3)O(∣V∣3)使用边列表为O ( ∣ V ∣ ⋅ ∣ E ∣ ) O(|V| \cdot |E|)O(∣V∣⋅∣E∣)。空间复杂度O ( ∣ V ∣ ) O(|V|)O(∣V∣)。第五部分总结与对比算法对比表特性Dijkstra算法Bellman-Ford算法适用图类型非负权图任意图可含负权边核心思想贪心动态规划/松弛时间复杂度O ( ∣ V ∣ 2 ) O(|V|^2)O(∣V∣2)或O ( ( ∣ V ∣ ∣ E ∣ ) log ⁡ ∣ V ∣ ) O((|V||E|)\log|V|)O((∣V∣∣E∣)log∣V∣)O ( ∣ V ∣ ⋅ ∣ E ∣ ) O(|V| \cdot |E|)O(∣V∣⋅∣E∣)空间复杂度O ( ∣ V ∣ ) O(|V|)O(∣V∣)O ( ∣ V ∣ ) O(|V|)O(∣V∣)功能求单源最短路径求单源最短路径可检测负权环优点在非负权图中效率高功能强大适用范围广缺点不能处理负权边时间复杂度高选择指南绝大多数情况边权非负优先使用Dijkstra算法尤其是堆优化版本。例如道路导航、网络路由。图含有负权边必须使用Bellman-Ford算法。例如金融套利模型、某些特殊约束问题。需要检测负权环使用 Bellman-Ford 算法。觉得文章有帮助别忘了 点赞 - 给我一点鼓励⭐ 收藏 ⭐- 方便以后查看 关注 - 获取更新通知标签#C语言#图论#最短路径#Dijkstra#Bellman-Ford#算法
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

46设计网站官网郑州网站建设包括哪些

深入探索Linux:从历史到应用的全方位指南 1. Linux的历史与背景 Linux的吉祥物是一只名为Tux的企鹅,由Larry Ewing创作。Tux的形象被广泛应用于Linux相关的网站、杂志等。Linux的历史可追溯到早期的UNIX系统,这些系统免费分发给大学,后来通过伯克利软件发行版(BSD)等项目…

张小明 2026/1/10 10:09:53 网站建设

汕头市建设局网站首页vi设计手册完整版案例

儿童睡前故事:LobeChat每天讲不一样的童话 在无数个夜晚,当孩子依偎在床头,轻声说“妈妈,再讲一个故事吧”的时候,很多家长心里既温暖又无奈——创意枯竭、疲惫不堪,翻来覆去还是那几个老掉牙的情节。而市面…

张小明 2026/1/10 20:00:09 网站建设

网站建设管理规定百度怎么做网页

TPFanCtrl2完全指南:掌握ThinkPad风扇控制的终极解决方案 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 TPFanCtrl2是一款专为ThinkPad双风扇笔记本设计的…

张小明 2026/1/10 19:59:36 网站建设

杭州企业云网站建设网站制作方案书

英雄联盟云顶之弈智能助手终极使用指南 【免费下载链接】LOL-Yun-Ding-Zhi-Yi 英雄联盟 云顶之弈 全自动挂机刷经验程序 外挂 脚本 ,下载慢可以到https://gitee.com/stringify/LOL-Yun-Ding-Zhi-Yi 项目地址: https://gitcode.com/gh_mirrors/lo/LOL-Yun-Ding-Zhi-Yi 还…

张小明 2026/1/9 19:07:32 网站建设

微信网站建设知识一个商城

公司员工管理 目录 基于springboot vue公司员工管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue公司员工管理系统 一、前言 博主介绍&…

张小明 2026/1/9 19:07:30 网站建设