zoukankan      html  css  js  c++  java
  • 迷宫

    迷宫

     
    描述
    一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。
    输入
    第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 <= n <= 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。
    输出
    k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。
    样例输入
    2
    3
    .##
    ..#
    #..
    0 0 2 2
    5
    .....
    ###.#
    ..#..
    ###..
    ...#.
    0 0 4 0
    
    样例输出
    YES
    NO

    源代码

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <iostream>
    
    using namespace std;
    	
    const int dx[4]={1,-1,0,0};
    const int dy[4]={0,0,1,-1};//定义移动方向
    	
    char tu[101][101];//定义全图
    int ha,la,hb,lb,n;
    int t;
    bool flag=false;//定义flag
    	
    void dfs(int ha,int la){//定义dfs函数,输入当前行与列
    tu[ha][la]='#';//封闭当前位置
    if(ha==hb&&la==lb){
    flag=true;
    }//若可以到达B点,定义flag为true;
    else for(int i=0;i<4;i++){
    int hh=ha+dx[i];
    int ll=la+dy[i];//枚举移动的方式
    if(hh>0&&hh<=n&&ll>0&&ll<=n&&tu[hh][ll]=='.'&&vhash[hh][ll]==0){//可行性判断
    dfs(hh,ll);//进行下一次函数
    }
    }
    }
    	
    void readp(){
    scanf("%d",&t);//输入数据量
    while (t--){//循环输入数据
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
        cin>>tu[i][j];//输入全图
    cin>>ha>>la>>hb>>lb;//输入A点行与列,B点行与列(此处是从0开始)
    ha+=1;
    la+=1;
    hb+=1;
    lb+=1;//调整至从1开始
    if(tu[ha][la]=='.'&&tu[hb][lb]=='.')dfs(ha,la);//判断A,B点是否可通行
    	if(flag)cout<<"YES"<<endl;
    	    else cout<<"NO"<<endl;//根据flag输出结果
    	    flag=false;//刷新flag
    	}
    	}
    	
    	int main(){
    	    readp();
    	    return 0;
    	}
    错因分析:
    1.tu数组不符合大小
    2.刷新地图,导致超时
    3.未考虑“起点或者终点有一个不能通行(为#)“的情况
  • 相关阅读:
    即将到来的“分布式云”(DPaaS):分布式计算+ DB +存储即服务
    【玩转MLS系列】基础教程
    【云速建站】微信公众平台中维护IP白名单
    基于华为云对话机器人技能平台的规则模板概述
    云享专家倪升武:微服务架构盛行的时代,你需要了解点 Spring Boot
    Python一秒搭建ftp服务器,帮助你在局域网共享文件
    华为担纲建设基础软硬件国家新一代AI开放创新平台
    基于华为云区块链服务快速部署和搭建链上应用
    protobuf代码生成
    python的str()和repr()的区别
  • 原文地址:https://www.cnblogs.com/shenlaizhibi/p/5861234.html
Copyright © 2011-2022 走看看