dfs:能找到可行的路径,所需时间长,需要标记位置
bfs:能找到最短的路径,所需空间长,需要出入队列
两个搜索的相同点是都利用了二维数组的图,有的时候都用了标记方法。
但是dfs,我觉得没什么变化,就这样了。
但是bfs,
1.可以用STL的queue,但是,没办法对付路径记录。
2.可以用自己写的结构体数组
比如:
struct node
{
int x,y,pre;//x,横坐标,y,纵坐标,pre,前驱点
}n[max];
然后用bfs的一个通用模板:
int front=0;
int rear=0;
void bfs(int beginx,int beginy,int endx,int endy)
{
n[0].x=beginx,n[0].beginy=y,n[0].pre=-1;//首先压入起点坐标,然后让起点坐标的前驱变成-1(也是回溯的终点)
rear=rear+1;
while(front<rear)
{
for(int i=0;i<4;++i)
{
int x=n[front].x+f[i][0];
int y=n[front].y+f[i][1];
if(.....)//怎么往下走,或者有没有走过,。。视情况而定
{
n[rear].x=x;
n[rear].y=y;
n[reat].pre=front;
rear++;//扩展队列
v[x][y]=...;//标记
if(x==endx&&y==endy) return;
}
}
front;//出队列
}
}
之后我们怎么打印:(print函数),回溯
void print(node now)
{
if(now.pre==-1)
print(....);//回溯到了底部
else
{
print(n[now.pre])
print(...)//从上一步的回溯,之后再打印;
}
}