03搜索与图论
acwing算法基础课笔记
数学系的学渣
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
06二分图:染色法、匈牙利算法
染色法判定二分图 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。 请你判断这个图是否是二分图。 #include <iostream> #include <cstring> using namespace std; const int N = 1e5 + 10, M = 2e5 + 10; int n, m; int h[N], e[M], ne[M], idx; int st[N]; // 点被染的颜色 void add(int a, int b) {原创 2022-02-02 15:03:22 · 548 阅读 · 0 评论 -
05最小生成树
Prim算法求最小生成树 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。 由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。 #include <iostream>原创 2022-02-02 15:00:38 · 1399 阅读 · 0 评论 -
04最短路
Dijkstra求最短路 I 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。 朴素版Dijkstra #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N = 510; int n, m; int g[N]原创 2022-02-02 14:57:38 · 662 阅读 · 0 评论 -
03树与图的遍历、拓扑排序
树的重心 给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 #include <iostream> #include <algorithm> #include <vector> using namespace std; const int N = 1e5 +原创 2022-02-02 14:46:12 · 347 阅读 · 0 评论 -
02BFS
走迷宫 给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。 请问,该人从左上角移动至右下角 (n,m) 处,至少需要移动多少次。 数据保证 (1,1) 处和 (n,m) 处的数字为 0,且一定至少存在一条通路。 #include <iostream> #include <algorithm> #incl原创 2022-02-02 14:42:45 · 2433 阅读 · 0 评论 -
01DFS
排列数字 给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 #include <iostream> using namespace std; const int N = 10; int n; int path[N]; bool st[N]; void dfs(int cur) { if (cur == n) { for (int i = 0; i < n; i ++ ) printf("%d原创 2022-02-02 14:35:14 · 474 阅读 · 0 评论
分享