DFS
BFS
基本概念
- 宽度优先搜索(queue)
- 每次搜索,从分支开搜,一层接一层的进行搜索
- 要求所有边的权重相当
具体实现
利用队列实现
每次搜索时,队头出队,搜索队头的所有分支,满足条件就入队
多用于图的遍历,连通块的搜索
int dx[4] = {1, 0, -1, 0}, dy[4] = {0, -1, 0, 1};
bool d[N][N];
int a[x][y];
int q[N * N];
int bfs()
{
int tt = 0, hh = 0;
//队头初始化
q[0] = a[x][y];
while(hh <= tt)
{
//出队头
auto t = q[hh ++];
int ans = 0;
for(int i = 0; i < 4; i ++)
{
int x = t.first + dx[i], y = t.second + dy[i];
if(x >= 0 && x < n && y >= 0 && y < n && !d[x][y])
{
ans ++;
q[++ tt] = {x, y};
d[x][y] = true;
}
}
}
return ans;
}
最短路径
-
有时可以通过BFS来求最短路,要求边的权重是1,每次宽搜,第一次搜到就是最短路。
-
DFS不可以,DFS第一次搜到时不一定是最短路