bfs
首先,他并不是一个自带的函数,而是一个自己编写的算法。
它如同一棵树:
你把所有的路径走一遍,是一种无脑搜索算法,时间复杂度为O(V+E)
所以正常情况下,都会用哈希表来优化(剪枝)
P1141 01迷宫
这是一道很经典的bfs题
看看题目,首先需要写一个输出:
scanf("%d%d",&n,&m);
for (int i=0;i<n;i++)
scanf("%s",s[i]);
memset(f,-1,sizeof(f));
然后编写bfs函数:
int bfs(int x,int y)
{
int move[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
book[x][y]=1;
int nx,ny;
while(xx.size()!=0 && yy.size()!=0)
{
xx.pop();
yy.pop();
for(int t=0;t<4;t++)
{
nx=x+move[t][0];
ny=y+move[t][1];
w=map[x][y];
b=map[nx][ny];
if(book[nx][ny]==0 && w!=b && nx>0 && ny>0 && nx<=n && ny<=n)
{
sum++;
book[nx][ny]=1;
step[nx][ny]=step[x][y]+1;
xx.push(nx);
yy.push(ny);
}
}
x=xx.front();
y=yy.front();
}
return sum;
}
最后的输出我就省略了。