BFS
一般用队列这种数据结构来具体实现BFS;
对于DFS,运用递归实现最普遍,也可以用“栈”,两种在算法思想上一致。
BFS
例题 hdu1312(队列,bfs模板)
#include <iostream>
#include <queue>
#define check(x,y)(x<n&&y<m&&x>=0&&y>=0)
//深搜现学现卖
//出队,周围点进队
//练习搜索
using namespace std;
char c[25][25];
int n,m,num;
//方向
int d[4][2]=
{
{-1,0},{0,-1},{1,0},{0,1}//左上右下
};
struct node
{
int x;
int y;
};
void BFS(int dx,int dy)
{
num=1;
queue<node>q;
node st,nt;
st.x=dx;
st.y=dy;
q.push(st);
while(!q.empty())
{
st=q.front();
q.pop();
for(int i=0; i<4; i++) //按四个方向搜索
{
nt.x=st.x+d[i][0];
nt.y=st.y+d[i][1];
if(check(nt.x,nt.y)&&c[nt.x][nt.y]=='.')
{
c[nt.x][nt.y]='#';
num++;
q.push(nt);
}
}
}
}
int main()
{
int i,j;
int dx,dy;
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
for(j=0; j<m; j++)
{
for(i=0; i<n; i++)
{
cin>>c[i][j];
if(c[i][j]=='@')
{
dx=i;
dy=j;
}
}
}
// num=0;
BFS(dx,dy);
cout<<num<<endl;
}
return 0;
}