最短路径

oo第四单元总结

老子叫甜甜 提交于 2019-12-22 11:23:02
oo第四单元总结 1. 总结本单元两次作业的架构设计 第四单元的两次作业都是对UML模型文件进行解析,主要关注类图、顺序图和状态图模型层次的语义观察,UML模型间关系,模型图表达的内容及关系,模型图之间的关系和一致性检查。 1.1第一次作业 第一次作业的主要是完成对UML类图的查询。我的思路是对类和类中的属性和操作用HashMap保存,对于关联,继承和顶级父类,建立静态数组保存类和接口之间的关系。对于函数的调用仅是返回图中的值。这次作业主要是要理解UML解析文件,需要发现如何找到属性和操作对应的类以及继承和关联关系是如何实现的。 第一次作业中我的代码有两个bug,一是在统计类实现的全部接口时,我用HashMap存接口间的继承关系,在多继承的情况下,会导致有的继承关系没有被记录。二是在类是否违背信息隐藏原则时,应该传出属性所在类的类名,我都传出了传进来的那个类名。对多继承没有使用恰当的保存方式以及对题意理解不充分。 1.2第二次作业 第二次作业的主要内容是对状态图,顺序图的查询和对类图的三个检查。在这次作业中我复用了第一次作业的代码,但我第一次作业的代码不能处理循环继承的问题,所以在MyUmlGeneralInteraction初始化时会出现死循环,需要更改初始化顺序。 2. 总结自己在四个单元中架构设计及OO方法理解的演进 第一单元 第一单元我基本没有架构设计

最短路径 -- Dijkstra算法

一曲冷凌霜 提交于 2019-12-22 06:34:58
定义一个有向图D=(V, A),对每一个弧a=(v i , v j ),相应地有权ω(a)=ω ij ,又给定D中的两个顶点v s ,v t 。设P是D中从v s 到v t 的一条路径,定义路P的权是P中所有弧的权之和,记为ω§。最短路径问题就是要在所有从v s 到v t 的路中,求一条权最小的路,即求一条从v s 到v t 的路P 0 ,使 ω(P 0 )=min ω(P) 在Dijkstra算法中,用P(v),T(v)分别表示点v的P标号和T标号,S i 表示第i步时,具P标号的点的集合。为了求出从v s 到各点的距离的同时,也求出从v s 到各点的最短路径,给每个点v以一个λ值,算法终止时,如果λ(v)=m,表示在从v s 到v的最短路径上,v的前一个点是v m ;如果λ(v)=M,表示D中不含从v s 到v的路;λ(v)=0表示v=v s 。 Dijkstra算法具体步骤: 给定赋权有向图D=(V, A)。 开始(i=1)令S1={v s },P(vs)=0,λ(v s )=0,对每一个v != v s ,令T(v)= ++,λ(v)=M,令k=s。 第一步:如果S i =V,算法终止,这时,对每个v∈S i ,d(v s ,v)=P(v);否则转入第二步。 第二步:考查每个使(v k , v j )∈A且v j !∈ S i 的点v j 。如果T(v j ) > P(v

1613最短路径问题

纵然是瞬间 提交于 2019-12-22 03:50:18
Description 平面上有n个点(N<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。 Input 输入文件short.in,共有n+m+3行,其中: 第一行为一个整数n。 第2行到第n+1行(共n行),每行的两个整数x和y,描述一个点的坐标(以一个空格隔开)。 第n+2行为一个整数m,表示图中的连线个数。 此后的m行,每行描述一条连线,由两个整数I,j组成,表示第i个点和第j个点之间有连线。 最后一行:两个整数s和t,分别表示源点和目标点。 Output 输出文件short.out仅一行,一个实数(保留两位小数),表示从S到T的最短路径的长度。 Sample Input 5 0 0 2 0 2 2 0 2 3 1 5 1 2 1 3 1 4 2 5 3 5 1 5 Sample Output 3.41 这题非常经典 1:Floyed # include <iostream> # include <cmath> # include <iomanip> # include <cstdio> using namespace std ; long long n , m ; double a [ 101 ] [ 101 ]

s5-15 开放的最短路径优先_OSPF

筅森魡賤 提交于 2019-12-19 13:21:02
L-S路由协议的实例—OSPF 开放的路径优先(Open Shortest Path First) 使用图(graph)来表述真实的网络 - 每个路由器/Lan都是一个节点 - 测量代价/量度(metric) 计算最短路径 OSPF在参考模型中的地位 OSPF概述 - OSPF是一种基于开放标准的链路状态路由协议,是目前IGP中应用最广、 性能最优的一个协议 - OSPF可以在大型网络中使用 - 无路由自环 - OSPF支持VLSM、CIDR等 - 使用带宽作为度量值(10 8 /BW) - 收敛速度快 - 通过分区实现高效的网络管理 单域OSPF的基本概念 - 必须划分区域 - Area 0(区域0),骨干区域( Backbone area ) -所有子区域必须连接到区域 0上 OSPF的发展历程 单区域OSPF RouterID 一个32位的无符号整数,是一台路由器的唯一标识,在整个自治系统内唯一 协议号 IP头中代表OSPF报文的协议号是89 TTL=1 通常OSPF报文不转发,只被传递一条,即在IP报头的TTL值被设为1,但虚联接除外 OSPF的网络类型 OSPF术语 OSPF分组(packet)类型 OSPF数据包类型 描述 Type 1-Hello 与邻居建立和维护毗邻关系。 Type 2-数据库描述包(DD) 描述一个OSPF路由器的链路状态数据库内容。 Type 3

迪杰斯特拉算法求最短路径

て烟熏妆下的殇ゞ 提交于 2019-12-19 13:03:25
迪杰斯特拉算法求最短路径: (针对从某一源点到其余各顶点间的最短距离) 初步的思想过程: 1.引进两个集合S和T,指定起始点O。 S用来记录已求出的最短路径的顶点(以及相应的最短路径长度),T用来记录未求出最短路径的顶点(以及该顶点到起点O的距离)。 2. 首先,S中包含起点O;T包含除O之外的外的其他顶点,T中顶点的距离为"起点O到该顶点的距离"。如果说O点和M点不相邻,则(O,M)的距离为∞。 3. 从T中选出距离最短的顶点N,将其加入S中,并从T中移去顶点N。 4. 更新T中各个顶点到起点O的距离。之所以更新U中顶点的距离,是由于上一步中确定了N是求出最短路径的顶点,从而可以利用N来更新其它顶点的距离;例如,(O,M)的距离可能大于(O,N)+(N,M)的距离。 5. 重复3和4,直到所有顶点均被遍历。 举例说明:(例如从顶点D出发,求其到其他定点的最短路径) 将顶点D加入到S中: 此时,S={D(0)}, T={A(∞),B(∞),C(3),E(4),F(∞),G(∞)}。 注:C(3)表示C到起点D的距离是3。 将顶点C加入到S中: 上一步操作之后,T中顶点C到起点D的距离最短;因此,将C加入到S中,同时更新U中顶点的距离。以顶点F为例,之前F到D的距离为∞;但是将C加入到S之后,F到D的距离为9=(F,C)+(C,D)。 此时,S={D(0),C(3)}, T={A(∞

算法设计与分析:图与计算几何算法

非 Y 不嫁゛ 提交于 2019-12-18 14:55:19
图和计算几何 有n个点、m条无向边的图,每条边都有长度d和花费p,再给出一个七点s和一个重点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 给定三角形的3条边,a、b、c,判断该三角形的类型。 直接利用狄克斯特拉算法求从顶点s到顶点t花费最小的最短路径。在狄克斯特拉算法中要做两点修改,一是增加记录路径最小花费的数字cost,cost[j]表示从顶点s到顶点j的最短路径的最小花费,当存在多条最短路径时需要比较路径花费求cost[j];二是如果顶点t的最短路径已求出,就不需要考虑其他顶点,输出结果并推出狄克斯特拉算法。 最长边对应最大角,对3条边e[0,2]按递增排序,求出result=e[0]+e[1]-e[3],根据result可以确定三角形的类型。 1-1 #include<stdio.h> #define MAXV 1010 #define INF 0xffffff //定义无穷 int n,m; int Dist[MAXV][MAXV],Cost[MAXV][MAXV]; int s,t; void Dijikstra(int s)//狄克特斯拉算法 { int dist[MAXV]; int cost[MAXV]; int S[MAXV]; int mindist,mincost,u; int i,j; for(i=1;i<=n;i++

Luogu4768 NOI2018归程(最短路径+kruskal重构树)

和自甴很熟 提交于 2019-12-17 18:12:31
  按海拔从大到小合并建出kruskal重构树,这样就能知道开车能到达哪些点,对这些点到1的最短路取min即可。 最难的部分在于多组数据的初始化和数组大小的设置。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> #include<queue> #include<cassert> using namespace std; #define ll long long #define N 200010 #define M 400010 #define inf 2000000010 char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<'0'||c>'9')) c=getchar();return c;} int gcd(int n,int m){return m==0?n:gcd(m,n%m);} int read() { int x=0,f=1;char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9') x=

Dijkstra(迪杰斯特拉求最短路径)-01-有向图-网络延迟时间

不想你离开。 提交于 2019-12-16 10:33:31
有 N 个网络节点,标记为 1 到 N。 给定一个列表 times,表示信号经过有向边的传递时间。 times[i] = (u, v, w),其中 u 是源节点,v 是目标节点, w 是一个信号从源节点传递到目标节点的时间。 现在,我们向当前的节点 K 发送了一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1。 注意: N 的范围在 [1, 100] 之间。 K 的范围在 [1, N] 之间。 times 的长度在 [1, 6000] 之间。 所有的边 times[i] = (u, v, w) 都有 1 <= u, v <= N 且 0 <= w <= 100。 1 class Solution { 2 public: 3 int networkDelayTime(vector<vector<int>>& times, int N, int K) { 4 vector<vector<int>>G(N,vector<int>(N,1000)); 5 vector<int>dist(N,1000); 6 for(int i = 0;i<times.size();i++){ 7 G[times[i][0]-1][times[i][1]-1] = times[i][2]; 8 } 9 /////////////////////////////////////

【转】腾讯面试经历

拟墨画扇 提交于 2019-12-15 19:28:34
原文地址为: 腾讯社招面试经历   前提:本人2011年毕业于一个普通本科,工作不到2年。   15号晚上7点多,正在炒菜做饭, 腾讯 忽然打电话来问我对他们的Linux C++的职位是否感兴趣,我表达了我感兴趣之后,就开始了一段简短的电话 面试 ,电话面试主要内容:C++和TCP socket通信的一些基础知识。之后就问我一道算法题:10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧着菜呢,所以我就没细想,说了一个连我都鄙视我的思路:我说导入数据库,然后用select语句选出最大的前1万个。可能我的答案连面试官都无语了,所以他就没再往下问了,不过他还是通知我明天16号早上去腾讯大厦笔试,由于我明天没空,就推迟到了17号早上10点。至此,整个电话面试就结束了。过后,我想了想,10亿个整数选前1万个大数,其实可以用:分治法+hash+多路归并排序来做,比如说,先把10亿个整数对1000取模,存储到1000个文件中,然后对每一个文件进行内部排序(比如快速排序,从大到小排序),然后再对这1000个文件进行多路归并,取出前1万个最大的数即可。   17号早上,怀着 忐忑不安的心情,终于来到了腾讯大厦,在前台说明情况后,领了一个临时访问牌,一个看起来30多岁的中年人(暂且称为面试官A)接待了我,给我一份笔试题,时间为1小时

学校期末考试版-最短路径

ぃ、小莉子 提交于 2019-12-15 07:54:59
声明:此版本是用于自己期末考试的,嘻嘻嘻,代码功能与正式版相比没有了所经过的最短路径。 算法设计: Dijkstra算法是解决单源最短路径问题的贪心算法,它先求出长度最短的一条路径,再参照该最短路径求出长度次短的一条路径,直到求出从源点到其他各顶点的最短路径。 Dijkstra算法的基本思想是首先假定源点为u,顶点集合V被划分为两部分:集合V和V-S。初始时S中仅含有源点为u,其中S中的顶点到源点的最短路径已经确定。集合V-S 中包含的顶点到源点的最短路径待定,称从源点出发只经过S中的点到达V-S中的点的路径为特殊路径,并用数组dist[]记录当前每个顶点所对应的最短特殊路径长度。 Dijkstra算法采用的贪心策略是选择特殊路径长度最短的路径,将其连接的V-S中的顶点加入到集合S中,同时更新数组dist[].一旦S包含了所有的顶点,dist[]就是从源到所有其他顶点之间的最短路径长度。 (1)选择数据结构。设置地图的带权邻接矩阵为map[][],即如果从源点u到顶点i有边,就令map[][]等于<u,i>的权值,否则map[u][i]=无穷大;采用一维数组dist[i]来记录源点到i顶点的最短路径长度;采用一维数组p[i]来记录最短路径上i顶点的前驱。 (2)初始化。令集合S={u},对于集合V-S中的所有顶点x,初始化dist[i]=map[u][i]