DFS:
void dfs(坐标)
{
if (满足条件)
{
结束处理;
}
else
{
用for循环或其他手段实现点的移动(一滑到底,相邻格子,“日”字型。。。。。。)
{
if(将要移动的点满足合法条件(不撞墙,不出界。。。。。。))
{
移动,并记录新的坐标;
dfs(新的坐标)//(DFS实现关键);
撤回当前点;
}
}
}
}
例题1:http://blog.csdn.net/sunny1996/article/details/43940349
例题2:http://blog.csdn.net/sunny1996/article/details/43939251
BFS:
struct point
{
int x;
int y;
其他具体用处;
};
void bfs()
{
while(!q.empty()
{
提取当前出队列点;
if(当前点满足要求)
{
记录步数并退出;
}
else
{
用for循环或其他方式实现移动
{
if(新的点满足合法条件)
{
新点入队;
}
还原旧点;
}
旧点出队;
}
}
int main()
queue<point> q;//BFS实现关键
例题:http://blog.csdn.net/sunny1996/article/details/43940385
总结:
个人理解的BFS与DFS的区别:DFS一次把一条路走完,BFS齐头并进