摘要: Constructing Roads 这道题很水,就是一个裸的最小生成树,最不过把已经连接的节点的值再设为0。 代码: 1 #include<cstdio> 2 #include<cstring> 3 #define N 1010 4 int dis[N][N],minn[N],n,m,a,b; 5 阅读全文
posted @ 2017-05-07 21:10 江屿 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 最短路径算法2——Bellman-Ford与SPFA算法 Bellman-Ford算法: 只能计算单源最短路径,时间复杂度为O(nm)n是顶点数,m是边数。 其实这个算法很简单,代码实现也很简单,大致和Floyed差不多吧。 循环n-1次,每次循环遍历所有边,必然会有一些边连接着蓝点与白点。因此每次 阅读全文
posted @ 2017-05-07 19:23 江屿 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 最短路径算法1——Floyed与Dijkstra算法。 Floyed算法: 求图中一个点到另一个点的最短路径,毫无疑问Floyed算法是最简单的,而且是多源最短路径,但时间复杂度很高,达到O(n^3)。 原理就是不断遍历一边所有点,把他们当作中间点,每次更新整个图。 Floyed代码: 1 #inc 阅读全文
posted @ 2017-05-07 11:31 江屿 阅读(240) 评论(0) 推荐(0) 编辑
摘要: Prim算法 Prim算法求最小生成树是采取蓝白点的思想,白点代表已经加入最小生成树的点,蓝点表示未加入最小生成树的点。 进行n次循环,每次循环把一个蓝点变为白点,该蓝点应该是与白点相连的最小边权的是当前蓝点中最小的。这样就相当于向生成树中添加了n-1次最小的边,最后得到的一定是最小生成树。 1 # 阅读全文
posted @ 2017-05-07 09:29 江屿 阅读(341) 评论(0) 推荐(0) 编辑
摘要: Kruskal算法 图的最小生成树的算法之一,运用并查集思想来求出最小生成树。 基本思路就是把所有边从小到大排序,依次遍历这些边。如果这条边所连接的两个点在一个连通块里,遍历下一条边,如果不在,就把这条边加入连通块,这样就可以保证生成树的边权最小。 我们使用并查集来判断两个点是否在同一个连通块里,如 阅读全文
posted @ 2017-05-07 09:01 江屿 阅读(363) 评论(0) 推荐(0) 编辑