最短路径

程序员必须掌握的算法有哪些?

ぐ巨炮叔叔 提交于 2019-12-03 23:11:39
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我, 数据结构与算法应该要学习到哪个程度呢? ,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是 零散 的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过不错的文章给大家。大家也可以留言区补充。 一、算法最最基础 1、时间复杂度 2、空间复杂度 一般最先接触的就是时间复杂度和空间复杂度的学习了,这两个概念以及如何计算,是必须学的,也是必须最先学的,主要有最大复杂度、平均复杂度等,直接通过博客搜索学习即可。 文章推荐: 算法分析神器—时间复杂度 二、基础数据结构 1、线性表 列表(必学) 链表(必学) 跳跃表(知道原理,应用,最后自己实现一遍) 并查集(建议结合刷题学习) 不用说,链表、列表必须,不过重点是链表。 三分钟基础数据结构:如何轻松手写链表? 以后有面试官问你「跳跃表」,你就把这篇文章扔给他 2、栈与队列 栈(必学) 队列(必学) 优先队列、堆(必学) 多级反馈队列(原理与应用) 特别是优先队列,再刷题的时候,还是经常用到的,队列与栈,是最基本的数据结构,必学。可以通过博客来学习。相关文章: 三分钟基础知识:什么是栈?

地铁出行路线规划

痴心易碎 提交于 2019-12-03 21:01:29
天津地铁最短换乘项目 一、任务: 实现一个帮助进行地铁出行路线规划的命令行程序。 GitHub项目地址: https://github.com/ldjkwx/TianJing-Subway 二、项目分析与规划 1.程序的模块,依赖关系以及估计开发所需的时间: 程序由Java语言编写,利用Dijkstra算法实现路径的选择,模块间的依赖关系如下图: 估计开发时间如下图: PSP 2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 18 Development 开发 · Analysis · 需求分析 (包括学习新技术) 1 · Design Spec · 生成设计文档 1 · Design Review · 设计复审 (和同事审核设计文档) 1 · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 1 · Design · 具体设计 1 · Coding · 具体编码 5 · Code Review · 代码复审 2 · Test · 测试(自我测试,修改代码,提交修改) 2 Reporting 报告 · Test Report · 测试报告 2 · Size Measurement · 计算工作量 1 · Postmortem & Process

HDU-3790最短路径问题

不羁岁月 提交于 2019-12-03 20:54:38
题目 分析 先按距离求出最短路,再在最短路中找花费最小的路. 引申:多权最短路,在处理好主权的情况下,处理副权。 #include<iostream> #include<cstdio> #include<cmath> #include<queue> #include<cstring> #include<algorithm> #define lson x<<1 #define rson x<<1|1 #define ll long long #define rint register int #define mid ((L + R) >> 1) using namespace std; template <typename xxx> inline void read(xxx &x) { char c = getchar(),f = 1;x = 0; for(;c ^ '-' && !isdigit(c);c = getchar()); if(c == '-') c = getchar(),f = -1; for(;isdigit(c);c = getchar()) x = (x<<1) + (x<<3) + (c ^ '0'); x *= f; } template<typename xxx>void print(xxx x) { if(x<0){putchar('-');x=-x;

结对编程作业

删除回忆录丶 提交于 2019-12-03 17:39:32
一、任务要求: 实现一个能处理正确输入的命令行的计算地铁线路最短路径的程序 1.读取 -map 参数来获得对应的自定义地铁文件(命名为 subway.txt)。 java subway -map subway.txt      2.用户希望查询指定地铁线经过的站点。这样,在应用程序需要支持一个新的命令行参数 -a ,它指定了用户希望查询的地铁线路。 java subway -a 1号线 -map subway.txt -o station.txt   3.能查出两站的最短路径,并保存在 routine.txt中(路径中要包含换乘信息) java subway -b 洪湖里 复兴路 -map subway.txt -o routine.txt 二、psp PSP 2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 14day Development 开发 · Analysis · 需求分析 (包括学习新技术) 2day · Design Spec · 生成设计文档 1day · Design Review · 设计复审 (和同事审核设计文档) 1day · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 0.5day · Design · 具体设计

结对编程之---地铁路线规划问题

笑着哭i 提交于 2019-12-03 17:23:24
一.项目总体性时间规划 为了对本次项目开发有一个总体把握,减少盲目性,也为了更好的推进项目,需结合客观情况制定一个时间计划表PSP表,并和队友进行分析交流。 二.项目需求分析 根据老师给的项目要求,和队友讨论,大致分许出以下两大需求。 1.地铁线路和站点信息用txt文本文档保存,用户希望查询地铁线路。在给定地铁线路参数时,能从起点站依次输出该线路经过的站点直到终点站,并将站点信息保存在station.txt文件里。 2.用户希望查询从出发站到终点站经过站点数最少的路线信息,并输出经过的站点个数和路径。如果需要换乘,要在换乘站下一行输出换乘的线路。输出信息存入到routine.txt文件里。 综上,系统功能模块包括文件的读取和输出,最短路径的计算,输入条件的判定。最短路径的计算依赖于文件读取模块。 三.程序设计与实现 本次项目采用Java程序进行开发。站点和线路信息提前录入subway.txt文件里等待被使用。编写一个主类SubwayMap,包含两个私有类Station和Edge。站点类Station里包含属性有:String stationName、Boolean visited、int dist、Station path、String trackname;Edge类里包含属性有:Station station、String lineName、int distance。

图的最短路径问题

╄→гoц情女王★ 提交于 2019-12-03 16:41:37
Floyd 多源最短路径 先看这个理解思路 https://www.cnblogs.com/wangyuliang/p/9216365.html 看这个提高,找路径 https://blog.csdn.net/qq_35644234/article/details/60875818 Dijkstra单源最短路径 https://blog.csdn.net/heroacool/article/details/51014824 来源: https://www.cnblogs.com/zhishoumuguinian/p/11803051.html

结对编程(地铁线路最短路径)

拈花ヽ惹草 提交于 2019-12-03 15:45:49
一、需求分析 实现一个帮助进行地铁出行路线规划的命令行程序。 1、任务 需求1: 实现一个支持显示地铁线路与计算换乘的程序。之后,用户可以通过命令行启动这个程序。程序在启动时,会读取不同命令对应的命令行参数。对于地铁线路信息图,我们约定它采用参数 -map 作为标志。程序启动时需要通过读取 -map 参数来获得对应的自定义地铁文件(命名为 subway.txt),从而得到地铁线路图的信息。 需求2: 实现基础的查询操作。比如说,用户希望查询指定地铁线经过的站点。这样,在应用程序需要支持一个新的命令行参数 -a,它指定了用户希望查询的地铁线路。这样,在给定地铁线路时,你的程序就需要能够从线路的起始站点开始,依次输出该地铁线经过的所有站点,直到终点站。输出的文件我们使用 -o 命令行参数来指定。 需求3: 实现一个计算任意两个站点间最短路径(经过的站点数最少)的程序,并输出经过的站点的个数和路径(包括出发站,目的站与换乘线路)。如果用户希望坐地铁,他希望能通过最少的站数从出发点到达目的地,这样就可以在命令行中以 -b 参数加两个地铁站点名称分别作为出发与目的,比如用户希望知道 洪湖里 到复兴路 之间的最短路线是怎样的,他就可以使用如下命令让程序将结果写入 routine.txt 中:subway.exe -b 洪湖里 复兴路 -map subway.txt -o routine.txt

结对编程作业

流过昼夜 提交于 2019-12-03 14:26:33
一、任务: 实现一个能处理正确输入的命令行的计算地铁线路最短路径的程序。 任务需求: 1.对于地铁线路信息图,我们约定它采用参数 -map 作为标志。程序启动时需要通过读取 -map 参数来获得对应的自定义地铁文件(命名为 subway.txt),从而得到地铁线路图的信息。 `java subway - map subway.txt ` 2.用户希望查询指定地铁线经过的站点。这样,在应用程序需要支持一个新的命令行参数 -a ,它指定了用户希望查询的地铁线路。 ` java subway -a 1号线 -map subway .txt -o station .txt ` 3.用户希望坐地铁,他希望能通过最少的站数从出发点到达目的地,在命令行中以 -b 参数加两个地铁站点名称分别作为出发与目的。 ` subway .exe -b 洪湖里 复兴路 -map subway .txt -o routine .txt ` 二、PSP PSP 2.1 Personal Software Process Stages Time Planning 计划 · Estimate · 估计这个任务需要多少时间 3weeks Development 开发 · Analysis · 需求分析 (包括学习新技术) 1day · Design Spec · 生成设计文档 2days · Design Review

结对编程作业(最短地铁路径规划)

本秂侑毒 提交于 2019-12-03 12:13:27
一,需求分析     1.任务:   实现一个帮助进行天津地铁出行路线规划的命令行程序。     主要功能包括:       a.输入 java subway -map subway.txt 要能让程序读入准备的源数据。       b.输入java subway -a 1号线 -map subway.txt -o station.txt要能查出该条地铁线包含的站并保存在station.txt中。       c.输入subway.exe -b 洪湖里 复兴路 -map subway.txt -o routine.txt要能查出两站的最短路径,并保存在 routine.txt中(路径中要包含换乘信息)。    2.PSP    二,软件的设计及算法思想实现    1.源数据结构说明           说明:以*.txt文件存储源数据,每一行代表的是一条线上所有站的信息,其中每一个站用空格隔开,而每一行的第一个数据代表的是该条地铁线的地铁名。    这样存储的好处是可以一次性读完所有的数据,而因为所求地铁不带权,因此只需要读到信息即可!   2.实体类属性说明      博主自定义了2个实体类(Station与Line)     Station包含的信息如下:      String name:主要存储的是地铁的名字。    boolean visited

图论基础——最短路算法集锦

故事扮演 提交于 2019-12-03 05:17:33
最短路算法有个 基础 —————— 松弛操作 (在大多数 最短路 算法都会涉及) if(d[e[i].v]>d[e[i].u]+w[i])//如果这条边的终点到源点的距离大于起点到源点距离,就替换。 { d[e[i].v]>d[e[i].u]+w[i]; } 最短路算法 一共有多少种方法 我不知道,在这里我只想记录 4 种: •Dijkstra:求单源点最短路( 不含负边权 ) •Bellman-ford:求单源点 最短路 ( 可含负边权 ) •SPFA(使用 队列 优化后的 Bellman-ford ) •Floyd:求各点间的最短路( 可含负边权 ) Firstly, Bellman-Ford算法 •算法步骤: 1、初始化:将除源点外的所有顶点最短距离估计值d[v]=inf,d[s]=0; 2、迭代求解:反复对边集E中每条边进行松弛操作,使得顶点集V中每个顶点v的最短距离估计值逐步逼近其最短距离; 3、检验负权回路:如果有存在点v,使得d[v]>d[u]+w[u][v],则有负权回路,返回false; 4、返回true,源点到v的最短距离保存在d[v]中。 那就上一个代码模版吧~ void Bellman() { for(int j=1;j<=n-1;j++)//每一次循环遍历所有的节点,遍历n-1次 { k=0 ; //判断每一次遍历中是否有过松弛,若没有