NOI openjudge 1792.迷宫

一天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<iostream>
using namespace std;

int mg[105][105],jg=0,zs,a,b,n,ax,ay,bx,by;

bool bl[105][105]={0};
int ab(int);

void fin(int x,int y)
{
    if(x==bx&&y==by)
        {
            jg=1;
            return;
        }
    if(bl[x][y]||!(mg[x][y]))return;
    else
    {
        bl[x][y]=1;
        fin(x-1,y);
        fin(x+1,y);
        fin(x,y-1);
        fin(x,y+1);
    }
}
int main()
{
    cin>>zs;
    while(zs--)
    {
        jg=0;
        char sum;
        cin>>n;
        for(int i=0;i<n;++i)
            for(int j=0;j<n;++j)
                {
                    cin>>sum;
                    if(sum==‘.‘)
                        {
                            mg[i][j]=1;
                            bl[i][j]=false;
                        }
                    else
                    {
                        bl[i][j]=true;//记录走过的路和不能走的路;
                        mg[i][j]=0;
                    }
                }
        cin>>ax>>ay>>bx>>by;
        if(mg[ax][ay]!=1||mg[bx][by]!=1)
            {
                cout<<"NO"<<endl;//剪枝                continue;
            }
            fin(ax,ay);
        if(jg)
                cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
    }
    return 0;
}
int ab(int a)
{
    if(a<0)return -a;
    else return a;
}

				
时间: 2024-10-12 10:30:57

NOI openjudge 1792.迷宫的相关文章

openjudge 1792 迷宫 解析报告

关于一道大水题的解析报告.1792:迷宫总时间限制: 3000ms 内存限制: 65536kB描述一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行.同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到.如果起点或者终点有一个不能通行(为#),则看成无法办到.输入第1行是测试数

2971 抓住那头牛 noi.openjudge

http://noi.openjudge.cn/ch0205/2971/ 总时间限制:  2000ms 内存限制:  65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次移动花费一分钟 2.从X移动到2*X,每次移动花费一分钟 假设牛没有意识到农夫的行动,站在原地不动.农夫最少要花多少时间才能抓住牛? 输入 两个整数

noi openjudge 1768:最大子矩阵

http://noi.openjudge.cn/ch0406/1768/ 描述已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2 的最大子矩阵是 9 2-4 1-1 8 这个子矩阵的大小是15.输入输入是一个N * N的矩阵.输入的第一行给出N (0 < N <= 100).再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从

整理小朋友在noi.openjudge上的作业(1)

NOI(题库正在建设中,做题纪录有可能会被删除,请注意) 第一章的统计放前面 1 编程基础之输入输出 10 0 0% 最基础有空补刷 2 编程基础之变量定义.赋值及转换 10 0 0% 最基础有空补刷 3 编程基础之算术表达式与顺序执行 20 0 0% 最基础有空补刷 4 编程基础之逻辑表达式与条件分支 21 0 0% 最基础有空补刷 5 编程基础之循环控制 45 10 22% 最基础有空补刷 6 编程基础之一维数组 15 5 33% 最基础有空补刷 7 编程基础之字符串 35 0 0% 有必要

oj 1792:迷宫 广搜和深搜

描述 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行.同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到.如果起点或者终点有一个不能通行(为#),则看成无法办到.输入第1行是测试数据的组数k,后面跟着k组输入.每组测试数据的第1行是一个正整数n (1 <= n <= 1

词典 (noi OpenJudge)

传送门:1806:词典 神奇的STL #include <iostream> #include <cstdio> #include <cstring> #include <map> #include <sstream> using namespace std; string s, s1, s2, word; map <string, string> dic; int main() { while (getline (cin, s) &

noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= m <= 100.接下来n行,每行m个整数,表示图像的每个像素点灰度.相邻两个整数之间用单个空格隔开,每个元素均在0~255之间. 输出 m行,每行n个整数,为顺时针旋转90度后的图像.相邻两个整数之间用单个空格隔开. 样例输入 3 3 1 2 3 4 5 6 7 8 9 样例输出 7 4 1 8 5

noi题库(noi.openjudge.cn) 1.11编程基础之二分查找T01、02、04

T01 查找最接近的元素 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n <= 100000.第二行包含n个整数,为非降序列各元素.所有元素的大小均在0-1,000,000,000之间.第三行包含一个整数m,为要询问的给定值个数.1 <= m <= 10000.接下来m行,每行一个整数,为要询问最接近元素的给定值.所有给定值的大小均在0-1,000,000,000之间. 输出 m行,每行一个整数,为最接近相应给定值的元素

noi题库(noi.openjudge.cn) 3.9数据结构之C++STL T1——T2

T1 1806:词典 描述 你旅游到了一个国外的城市.那里的人们说的外国语言你不能理解.不过幸运的是,你有一本词典可以帮助你. 输入首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行.每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开.而且在词典中不会有某个外语单词出现超过两次.词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词.输入中出现单词只包括小写字母,而且长度不会超过10.输出在输出中,你需要把