zoukankan      html  css  js  c++  java
  • C++程序算法题----迷宫(一)

    题目:

    一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道。看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头君是否有可以逃出去的路。

    输入格式

    第一行输入两个整数 n和 m,表示这是一个 n×m的迷宫。接下来的输入一个 n行 m列的迷宫。其中 'S' 表示蒜头君的位置,'*'表示墙,蒜头君无法通过,'.'表示路,蒜头君可以通过'.'移动,'T'表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。

    输出格式

    输出一个字符串,如果蒜头君可以逃出迷宫输出"yes",否则输出"no"。

    数据范围

    1≤n,m≤10。

    Sample Input

    3 4

    S**.

    ..*.

    ***T

    Sample Output

    no

    Sample Input 2

    3 4

    S**.

    ....

    ***T

    Sample Output 2

    yes

    思路:思路来源

    运用深度搜索。找到人的位置,因为只能从上下左右四个方向出发,所以每到一个点,先判断是否是终点,然后考虑这个点是否是在该棋盘上,是否能走,是否已经走过。最后如果能出去,则输出yes,否则输出no。

    代码

    #include<iostream>
    #include<cstring>
    #include<stdio.h>
    int n,m;
    char road[15][15]; //棋盘
    bool is_run[15][15]={false}; //是否已经走过
    int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}}; // 分别代表四个方向
    bool out = false; //是否可以出去
    using namespace std;
    // 因为要从4个方向出发,所以需要判断下一个点是否在地图里
    bool in_road(int x,int y){
        return (0<=x&&x<n)&&(0<=y&&y<m);
    }
    void DFS(int x,int y){
        if(road[x][y]=='T'){
            //找到出口
            out = true;
            return;
        }
        if(!in_road(x,y)||road[x][y]=='*'||is_run[x][y]){
            return;
        }
        is_run[x][y] = true;
        for(int i=0;i<4;i++){
            int tx = x+dir[i][0];
            int ty = y+dir[i][1];
            DFS(tx,ty);
        }
        return;
    }
    int main(){
        int x,y;
        cin>>n>>m;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cin>>road[i][j];
                if(road[i][j]=='S'){
                    x = i;
                    y = j;
                }
            }
        }
        DFS(x,y);
        if(out){
            cout<<"yes"<<endl;
        }else{
            cout<<"no"<<endl;
        }
        return 0;
    }
    
    

    运行结果:


  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/yangxiao-/p/13683464.html
Copyright © 2011-2022 走看看