DFS与BFS搜图模板总结

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




总结:

个人理解的BFSDFS的区别:DFS一次把一条路走完,BFS齐头并进



 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值