![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
明心_前进
这个作者很懒,什么都没留下…
展开
-
二分图的最大匹配(找女友算法)
二分图的最大匹配,也可以称为匈牙利算法,或者找女友算法算法描述:我们认为所有妹子都是可以去尝试的如果发现妹子已经有了男朋友,那么我们出于不达目的不罢休的态度,我们去找她男朋友,问他能不能换一个女朋友如果他有备胎,换了女朋友,那么我们就把妹子拿下如果他也没办法,换不了,那么我们也就没办法了,尽力了题目描述:给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求原创 2021-07-09 21:46:46 · 225 阅读 · 0 评论 -
染色法判断二分图
二分图:当且仅当图中不含有奇数环,两个集合内部的内部没有边题目描述:给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。输出格式如果给定图是二分图,则输出 Yes,否则输出 No。数据范围1≤n,m≤105输入样例:4 41 31 42 32 4输出样例:Yes代码实现:import java.io.*原创 2021-07-09 17:15:15 · 259 阅读 · 0 评论 -
kruskal最小生成树算法
之前我们介绍了prim最小生成树算法,那么这个kruskal最小生成树算法也能得到一个图的最小生成树,但是采取的方式是不一样的kruskal算法一开始将我们所有的边都读入,然后从中选取一条权重最小的边,并判断它的两个节点是否是连通的,如果没有连通,则将两点连通。如果能得到一个最小生成树,那么它拥有n-1条边,我们可以通过我们连通的边数来进行判断,判断图是否会有最小生成树。题目描述:给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树原创 2021-07-09 17:00:16 · 209 阅读 · 0 评论 -
prim最小生成树问题
题目描述:给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包原创 2021-07-09 16:30:54 · 185 阅读 · 0 评论 -
floyd求最短路问题
在边权可能为负数的情况下,我们还可以用floyd算法来对问题进行求解,只是这个方法的时间复杂度比较高为O(n3^33)简单理解,图中i,j两个节点之间的最短距离,由i,j 经过 1,k的节点的所有状态计算出来,因此需要将k放最外层题目描述;给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。输入格式第原创 2021-07-09 16:18:21 · 164 阅读 · 0 评论 -
spfa求负环
我们之前已经介绍了spfa算法,即只将距离变短了的节点带入队列对其他节点的距离进行更新。而这种方式其实还可以用来判断图中是否含有负环。因为我们记录了每次距离变短的节点,我们可以进行一个统计,然后利用两个常用的方法对负环进行判断:统计每个点入队的次数,如果某个节点入队n次,则存在负环统计每个点最短路所包含的边数,如果某点的最短路边数大于等于n,则说明也存在负环对第一种情况,如果没有权重为2的边,那么b点只会入队一次,但是如果,我们增加了权重为2的边,那么a点和b点都会不断入队,直到入队n次,我们原创 2021-07-09 16:06:04 · 335 阅读 · 0 评论 -
spfa求最短路问题(带负权)
我们在之前介绍了bellman-ford算法求解带负权的最短路问题,也解释了为什么我们不能使用dijkstra算法进行求解,今天我们要介绍一种新的求解带负权最短路问题的方法,spfa算法,这其实也是对bellman-ford算法优化。spfa算法在最好的情况下,算法时间复杂度为O(m),最坏情况下算法时间复杂度为O(nm)那么spfa是如何对bellman-ford算法进行优化的呢? 在bellman-ford算法的松弛操作中,即使点b并没有被更新,还是需要用它去更新其他节点,这其实是没有必要的,因原创 2021-07-09 15:13:04 · 539 阅读 · 0 评论 -
有边数限制的最短路问题
bellman-ford算法给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示从 1 号点到 n 号点的最多经过 k 条边的最短距离。如果原创 2021-07-09 14:55:33 · 269 阅读 · 0 评论 -
最短路问题dijkstra问题Ⅱ
dijkstra解决的是单源最短路问题,即一个点到另外一个点的最短路问题。这种单源最短路问题有很多做法,如dijkstra以及SPFA等等。今天我们主要了解dijkstra算法:初始化一个节点dist[1]=0,其他都为无穷大利用初始节点更新邻居节点的距离,找到当前节点的邻居中距离最短的点加入组织利用加入的点继续更新其他节点;我们一共需要n次循环,n为节点数,因为每次只能加入一个节点进入组织。 我们如上图所示,一开始我们假设到达所有节点的距离都为无穷大即d[1] = INF,d[2] = IN原创 2021-06-03 16:28:38 · 95 阅读 · 0 评论 -
最短路问题之dijkstra
dijkstra解决的是单源最短路问题,即一个点到另外一个点的最短路问题。这种单源最短路问题有很多做法,如dijkstra以及SPFA等等。今天我们主要了解dijkstra算法:初始化一个节点dist[1]=0,其他都为无穷大利用初始节点更新邻居节点的距离,找到当前节点的邻居中距离最短的点加入组织利用加入的点继续更新其他节点;我们一共需要n次循环,n为节点数,因为每次只能加入一个节点进入组织。 我们如上图所示,一开始我们假设到达所有节点的距离都为无穷大即d[1] = INF,d[2] = IN原创 2021-06-03 16:27:45 · 165 阅读 · 0 评论