![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
搜索与图论
文章平均质量分 59
搜索与图论
DearLife丶
“翻滚的时代浪潮中,曾有多少灵魂抗争”
展开
-
二分图(染色法、匈牙利算法)
判别二分图——染色法深度优先遍历O(M+N)求二分图的最大匹配——匈牙利算法理论时间复杂度O(MN),实际运行时间一般远小于该值。理论时间复杂度高,但一般实际运行效果很好的算法还有很多,如:最大流算法。...原创 2021-07-26 13:43:42 · 628 阅读 · 4 评论 -
最小生成树典型算法总结~
最小生成树的分类????:最小生成树一般用于无向图,有向图几乎不会用到。方法选择:稠密图:用朴素版Prim算法稀疏图:用Kruskal算法堆优化版Prim一般不常用!朴素版Prim大体思路可以参考Dijkstra算法,并注意相同点和不同点思路1.将所有距离都初始化为+ ∞dist[1] = 0,dist[i] = + ∞ (dist数组表示起点到i点的距离)2.n次迭代for(i = 0; i < n; i ++ )①找到不在集合当中的距离最近的点(s表示当前已经在连通块中原创 2021-07-25 12:59:53 · 1010 阅读 · 1 评论 -
最强大脑——数字华容道(BFS)
AcWing 845.八数码在一个3×3的网格中,1~8这8个数字和一个“x”恰好不重不漏地分布在这3×3的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把“x”与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让“x”先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下:1 2 3 1 2 3 1原创 2021-01-31 17:33:43 · 3756 阅读 · 0 评论 -
最短路问题(超详细~~)
文章目录最短路问题分类朴素Dijkstra算法最短路问题分类最短路算法知识结构图注:n为顶点数,m为边数每种不同的情况都有相应最适合的算法,但不用拘泥于一定要用某个算法。单源最短路:求一个点到其他所有点的最短距离多源汇最短路:源 指 起点,汇 指 终点。任意两点间的最短距离(起点、终点不确定)稠密图:m至少和n^2大致是一个级别 (稠密图用邻接矩阵存储)稀疏图:m至少和n大致是一个级别 (稀疏图用邻接表存储)重点:建图,如何把原问题抽象成一个最短路问题,如何定义点和边。朴素Di原创 2021-01-27 20:57:23 · 7656 阅读 · 0 评论 -
拓扑排序
若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。有向无环图一定存在拓扑序列。故有向无环图也被称为拓扑图。思路:所有入度为0的点都可以作为起点。入度为0的点入队while(queue不空){ t = 队头; 枚举t的所有出边 t → j 删掉 t → j,d[ j ] -- ; if(d[ j ] == 0) j 入队}典例——A...原创 2021-01-24 17:19:59 · 137 阅读 · 0 评论 -
DFS应用
DFS:一条路走到底使用到的数据结构 stack(栈) 空间 O(h) (与层数成正比)不具有最短性BFS:按层扩展使用到的数据结构 queue(队列) 空间 O() (指数级)最短路(每次走的一定是距离当前节点最近的点)DFS应用——全排列典例——AcWing 842.排列数字给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排...原创 2021-01-23 11:03:16 · 1020 阅读 · 0 评论 -
树与图的存储和遍历
树与图的存储树是一种特殊的图(无向连通图),与图的存储方式相同。对于无向图中的边ab,我们需要存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。邻接矩阵g[a][b] 存储边a->b,当a,b两点之间有边时,g[a][b] = 1,如果该图是一个带权图,那么g数组中存的就是边上的权值。邻接表对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点。(类似哈希表的拉链存储法)int h[N], e[N], ne[N],..原创 2021-01-24 12:32:50 · 497 阅读 · 6 评论 -
BFS应用——走迷宫
AcWing 844.走迷宫思路:题目要求最少移动次数,想到BFS每次都向下搜索距离当前点最近的点,直到终点。#include <iostream>#include <algorithm>#include <cstring>#include <queue>using namespace std;const int N = 110;typedef pair<int,int> PII;int n,m;int原创 2021-01-23 15:25:50 · 242 阅读 · 0 评论