搜索
BFS 广度优先搜索
求最小距离
用队列
求最小距离和Dijkstra作对比
BFS求最短路要求每一步都是1
如果所有边权都是1,那么用队列相当于用优先队列
BFS求最短路要求每一步一定是1吗?
不一定
边权只有 0 和 1 的BFS,可以用双端队列
如果有边权是 2 呢?可能可以把这一条边拆成2个长度为 1 的边
BFS的时间复杂度是多少?
点数+边数,其实就是边数
点数 * 每个点的方案数
比如在马的遍历中 8*n*m
如果是车的遍历呢,有障碍物
直接做BFS,时间复杂度是 nm(n+m)
可以优化,相当于优化最小的转弯个数
d[i][j][k] 到 (i, j) 位置,面向 k 方向,最小步数
向前移动,不消耗步数
选择转向,消耗1步
DFS 深度优先搜索
问连通块个数 / 大小
用栈(非递归) 或者 用递归
二维平面
游戏/比较一般的
树上的
图上的
P1219 [USACO1.5]八皇后 Checker Challenge
P1706 全排列问题
P1157 组合的输出
P2036 [COCI2008-2009#2] PERKET
P1605 迷宫
P1036 选数
P1019 单词接龙
P2404 自然数的拆分问题
P1535 [USACO08MAR]Cow Travelling S
5 * 5 的棋盘
从 (sx, sy) 到 (ex, ey) 走若干步
同一个位置不能走两次,问方案数
不要求最短路
这个题目必须用深搜
98884
2 3 4 2 0 0 2 0 0
3
P1219 [USACO1.5]八皇后 Checker Challenge
比较基础的问题
枚举全排列:
P1706 全排列问题
for (int i = 0; i < n; i++)
{
a[i] = i + 1;
}
// sort(a, a + n);
do
{
for (int i = 0; i < n; i++)
{
printf(" %d", a[i]);
}
printf("\n");
}
while (next_permutation(a, a + n));
1 2 2
2 1 2
2 2 1
枚举组合 例题:
P1157 组合的输出
0 1 2 3 4 数组下标
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
0 1 1 1 0
1 0 0 1 1
1 0 1 0 1
1 0 1 1 0
1 1 0 0 1
1 1 0 1 0
1 1 1 0 0
1 2 3 4 5 数组下标
0 0 0 1 1
0 0 1 0 1
0 0 1 1 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
15 = 0b1111 = {3, 2, 1, 0}
11 = 0b1011 = {3, 1, 0}
枚举子集 例题:
P2036 [COCI2008-2009#2] PERKET
P1605 迷宫
P1036 选数
P1019 单词接龙
aba
aca
ada
aea
afa
aga
aha
aia
pizza
at
atide
ide
P2404 自然数的拆分问题
初始 a
a -> aa
a -> ab
a -> ac
a -> ad
a -> ae
a -> af
int factorial(int x)
{
if (f[x] > 0)
{
return f[x];
}
f[x] = (x == 0 ? 1 : (x == 1 ? 1 : x * factorial(x - 1)));
return f[x];
}
search 4 types
dfs
for (int i = 0; i < n; i++)
{
a[i] = i;
}
do
{
output
}
while (next_permutation(a, a + n));
choose 2 from 4
1 2
1 3
1 4
2 3
2 4
3 4
a[0] = 0;
a[1] = 0;
a[2] = 1;
a[3] = 1;
do
{
}
while (next_permutation(a, a + n));
22 = 10110 = {4, 2, 1}
bfs = shortest path, one state is small enough to be pushed into the queue.
dfs = others
tree: almost all use dfs
graph: tarjan
P1596 [USACO10OCT]Lake Counting S
P5198 [USACO19JAN]Icy Perimeter S
P1825 [USACO11OPEN]Corn Maze S
5 6
(x1, y1) (x2, y2)
x1 ^ x2 ^ x
y1 ^ y2 ^ y
(x, y)
P2730 [USACO3.2]魔板 Magic Squares
x / 100 % 10
x % 1000 / 100
2 3 4 2 0 0 2 0 0
P4268 [USACO18FEB]Directory Traversal G
the answer of the root
folder1/file1
folder1/folder2/file2
folder3/file3
file4
3 5 7 4 1 2 9 6 8
P2853 [USACO06DEC]Cow Picnic S
P2725 [USACO3.1]邮票 Stamps
P2017 [USACO09DEC]Dizzy Cows G
P2666 [USACO07OCT]Bessie's Secret Pasture S
P2690 [USACO04NOV]Apple Catching G
P2895 [USACO08FEB]Meteor Shower S
P6207 [USACO06OCT] Cows on Skates G
P1219 [USACO1.5]八皇后 Checker Challenge
P1930 [USACO3.3]亚瑟王的宫殿
P2921 [USACO08DEC]Trick or Treat on the Farm G
P2962 [USACO09NOV]Lights G
P3067 [USACO12OPEN]Balanced Cow Subsets G