广搜模板
int s[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
struct node
{
int x,y;
int step;
}cur;
void BFS()
{
queue<node> Q;
cur.x = sx;
cur.y = sy; //广搜开始位置sx,sy为全局变量
cur.step = 0;
Q.push(cur);
while(!Q.empty())
{
node p = Q.front();
Q.pop();
if(满足条件)
{
.....
return;
}
for(int i = 0; i < 4; i ++) //四个方向开始搜索
{ node pre;
pre =p;
pre.x += s[i][0];
pre.y += s[i][1];
if(pre.x >= 0 && pre.x < n && pre.y >= 0 && pre.y < m &&!vis[pre.x][pre.y]) //判断广搜的边界和是否访问过
{
pre.step++;
vis[pre.x][pre.y]=1; //标记位
Q.push(pre);
}
}
}
}
深搜模板
void dfs(int x,int y)
{
int i,j,xx,yy;
num++; //搜索的深度
map[x][y]=1; //标记位
if(满足条件)
{
.....
return;
}
else for(i=0; i<4; i++)//四个方向优先深度搜索
{
xx=x+f[i][0];
yy=y+f[i][1];
if(xx>=0&&yy>=0&&xx<5&&yy<5&&map[xx][yy]!=1)//搜索范围及是否搜过
dfs(xx,yy);
}
}
深搜+回溯
void dfs(int dep,int x,int y)
{
int tx,ty;
if(满足条件)
{
。。。。
return;
}
else
{
for(int i=1;i<=4;i++)
{
tx=dx[i]+x;
ty=dy[i]+y;
if( 边界限制 && !set[tx][ty] )
{
set[tx][ty]=true;
dfs(dep+1,tx,ty);
set[tx][ty]=false;
}
}
}
}