![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
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 · 420 阅读 · 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 · 1182 阅读 · 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 · 530 阅读 · 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 · 270 阅读 · 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 · 2304 阅读 · 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 · 376 阅读 · 0 评论