深度优先搜索

  基本思想:先选择一种可能情况向前探索,在探索过程中,一点那发现原来的选择是错误的,就退回一步重新选择,继续向前探索,(回溯)反复进行。

【例题】迷宫问题                      ——【传送门】

思路:先随意选择一个方向,一步步向前试探,如果碰到死胡同说明该前进方向已经无路可走,这时首先看别的方向还是否有路可走,若有路可走,则该方向再次向前试探,若没有,则退回上一步,再看其他方向是否有路可走,,按此原则不断回溯和探索,知道找到入口为止。

框架:

int search(int ......)
{
    ;i<=方向总数;i++)
    if(满足条件)
    {
        保存结果;
        if(到达目的地)
            输出解;
        );
        恢复:保存结果之前的状态{回溯一步};
    }
}

具体代码实现如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 20
using namespace std;
int map[MAXN][MAXN];//表示迷宫地图
bool temp[MAXN][MAXN];//标记是否走过
]={,,,-};//横坐标的上下左右
]={-,,,};//纵坐标的上下左右
int m,n,total,sx,sy,fx,fy,l,r,t;//m,n:地图的长宽,total:方案总数,sx,sy起点的横纵坐标,fx,fy:终点的横纵坐标,t:障碍总数,l,r:障碍坐标
void search(int x,int y)//x,y:现在所在的点的坐标
{
    if(x==fx&&y==fy)//到达终点
    {
        total++;//方案总数
        return;    //返回继续寻找
    }
    ;i<=;i++)
        &&map[x+dx[i]][y+dy[i]]==)//判断下面要走的路是否有障碍
        &&y+dy[i]>=&&x+dx[i]<=n&&y+dy[i]<=m)//判断是否超越迷宫边界
        {
            temp[x+dx[i]][y+dy[i]]=;
            search(x+dx[i],y+dy[i]);
            temp[x+dx[i]][y+dy[i]]=;//回溯一步
        }
}
int main()
{
    cin>>n>>m>>t;
    ;i<=n;i++)
    ;j<=m;j++)
    map[i][j]=;
    cin>>sx>>sy;
    cin>>fx>>fy;
    ;i<=t;i++)
    {
        cin>>l>>r;
        map[l][r]=;
    }
    map[sx][sy]=;
    search(sx,sy);
    printf("%d",total);
    ;
}

最新文章

  1. 萌新笔记——linux下(ubuntu)反删除(误删恢复)与回收站制作
  2. 特征检测之Haar
  3. jS事件之网站常用效果汇总
  4. 设计模式--简单工厂(Factory)模式
  5. 服务器能访问共享,但是ping不通解决方案
  6. LeetCode24 Swap Nodes in Pairs
  7. 团体程序设计天梯赛-练习集L1-005. 考试座位号
  8. MSSQL 日期操作函数 总结
  9. 基于visual Studio2013解决C语言竞赛题之1079狼羊过河
  10. [置顶] C++为什么是C++而不是++C
  11. GitBook 使用
  12. 用Ubuntu快速安装Jenkins
  13. 24.QTableView函数使用,右击菜单实现
  14. 【Vue】定义组件 data 必须是一个函数返回的对象
  15. 基于Struts2框架的文件下载 --- Struts2
  16. 论Injection的前世今生
  17. Retrofit 打印log时,中文会显示类似%E8%BE%BD字符
  18. 使用 kubectl drain 从集群中移除节点
  19. EventUtil——跨浏览器的事件对象
  20. 177. [USACO Jan07] 有限制的素数

热门文章

  1. Docker概念学习系列之Docker是什么?(1)
  2. c#合并字典
  3. 初学SqlHelper - 实现增删改查
  4. 使用Git(msysgit)和TortoiseGit上传代码到GitHub
  5. mysql通过数据文件恢复数据方法
  6. (三)css之浮动&amp;定位
  7. 初识Socket通信:基于TCP和UDP协议学习网络编程
  8. 多结果集IMultipleResult接口
  9. express 请求跨域后端解决方法CORS
  10. vbScript: 编号成生不夠位數前面加零