1,bfs 是个什么玩意???
这是百度对于bfs的描述,太复杂了?没关系,我用一个走迷宫的题目来带大家了解bfs;
题目
对应代码
memset(d, -1, sizeof d);
d[0][0] = 0;
相关代码
可以使用方向向量的方式
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
const int N = 110;
int n, m;
int g[N][N];
int d[N][N];
PII q[N * N];
int bfs(){
int hh = 0, tt = 0;
q[0] = {0, 0};
memset(d, -1, sizeof d);
d[0][0] = 0;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
while(hh <= tt)
{
auto t = q[hh ++];
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 < m && g[x][y] == 0 && d[x][y] == -1)
{
d[x][y] = d[t.first][t.second] + 1;
q[++ tt] = {x, y};
}
}
}
return d[n - 1][m -1];
}
总结
我对于他的理解有点像是波纹一样(波纹疾走 )
谢谢大家