• 洛谷P1605 迷宫 深度搜索 模板!


    题目背景

    给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

    题目描述

    输入格式

    第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点坐标FX,FY。接下来T行,每行为障碍点的坐标。

    输出格式

    给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方案总数。

    输入输出样例

    输入 #1
    2 2 1
    1 1 2 2
    1 2
    
    输出 #1
    1

    说明/提示

    【数据规模】

    1≤N,M≤5

    代码

    #include <iostream>
    #include <cstdio>
    using namespace std;
    bool G[15][15],VIS[15][15];    //G为总地图,VIS记录是否访问
    int n,m,d[5]= {-1,0,1,0,-1};       //方向
    int nx,ny,ex,ey,CNT;
                //nx,ny起点坐标;ex,ey终点坐标,CNT路径条数
    void dfs(int x,int y) {
     if (x ==ex&&y ==ey) {       //如果到终点
      CNT++;          //路径加一
      return;        //回去继续查找 返回上一级
     }
     for (int k=0; k<4; k++) {
      int l=x+d[k];
      int r=y+d[k+1];
      if (l>=1&&r>=1&&l<=n&&r<=m&&!G [l][r]&&!VIS [l][r]) {      //注意起点
       VIS [l][r]=true;              //标记为已访问
       dfs (l,r);
       VIS [l][r]=false;            //回溯
      }
     }
     return;                        //返回上一级 继续查找  如果上一级还是没有合适路径,继续返回           
    }
    int main () {
     int t,zx,zy;
     cin>>n>>m>>t>>nx>>ny>>ex>>ey;
     G[nx][ny]=true;
     while(t--) {
      cin>>zx>>zy;
      G[zx][zy]=true;            //设为障碍
     }
     dfs (nx,ny);          //从起点开始寻找
     cout<<CNT;
     return 0;
    }
     
    深度搜索套用模板
     
    补充:C语言里面是没有bool(布尔)类型的,C++里面才有,这就是说,在C++里面使用bool类型是没有问题的。bool类型有只有两个值:true =1 、false=0
  • 相关阅读:
    ubuntu 12.04 配置iscsi共享及挂载iscsi共享
    python_数据类型
    python_基本操作
    shell习题第5题:批量更改文件后缀名
    shell习题第4题:监控ip地址存活
    shell习题第3题:统计内存大小
    shell习题第2题:统计ip访问量
    shell习题第1题:每日一文件
    IIS网站的应用程序与虚拟目录的区别及应用
    http状态码
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11618499.html
Copyright © 2020-2023  润新知