1141 01迷宫

题目描述

有一个仅由数字0与1组成的n×n格迷宫。若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上。

你的任务是:对于给定的迷宫,询问从某一格开始能移动到多少个格子(包含自身)。

输入输出格式

输入格式:

输入的第1行为两个正整数n,m。

下面n行,每行n个字符,字符只可能是0或者1,字符之间没有空格。

接下来m行,每行2个用空格分隔的正整数i,j,对应了迷宫中第i行第j列的一个格子,询问从这一格开始能移动到多少格。

输出格式:

输出包括m行,对于每个询问输出相应答案。

输入输出样例

输入样例#1: 复制

2 2
01
10
1 1
2 2
输出样例#1: 复制

4
4

说明

所有格子互相可达。

对于20%的数据,n≤10;

对于40%的数据,n≤50;

对于50%的数据,m≤5;

对于60%的数据,n≤100,m≤100;

对于100%的数据,n≤1000,m≤100000。

大家看到题目可能想起了深搜的板子题:迷宫【详见“迷宫”】,但这个题目和迷宫那个题显然不是很一样,但是根据题目来看我们也自然而然能够想到深搜DFS。首先这个题基本和迷宫问题没有什么很大的区别,只是少了一个条件,多了另外一个条件:不用判断障碍物,但必须要是在0上走1,在1上走0,也就是你下一次走的和你现在走的不能一样,而且这里依然要判断重复路径和越界。

首先和迷宫一样,我们定义一个dx[4],dy[4]用来循环行走的方向,也就是下一次行走的位置,分别是:

dx[4]={1,-1,0,0},dy[4]={0,0,1,-1},当然也可以定义一个二维的数组b[4][2]={{1,0}{-1,0}{0,1}{0,-1}},接下来定义一个res数组用来标记[x][y]这个点是否已经走过了,如果是,那么直接跳过,如果不是的话,再进行下一步。

下面附上代码:

#include<bits/stdc++.h>//万能头文件,但似乎会使运行变慢,因为无用库太多
using namespace std;
][];//01数组
][];//答案数组
][];//临时的坐标数组
int n, m, pl;//pl是当前区块连通的点数
][] = {{,},{,},{,-},{-,}}; //上下左右四方向的深搜
void dfs(int x, int y){
    pl++;//来到一个新的点,下面存储该点坐标
    lin[pl][] = x;
    lin[pl][] = y;
    res[x][y] = ;//这个点已经走过了,只是为了防止一趟深搜内部走重复点,所以不需要赋为pl
    ; i <= ; i++){
        ];//u,v即为目的地
        ];
         || u > n || v <  || v > n)//超出边界?
            continue;
        ) continue;//走到过了 ?
        if(a[u][v] == a[x][y]) continue;//根据题意,并不能走?
        dfs(u, v);//以上条件都不满足才向下搜索
    }
}
int main(){
    memset(res, , sizeof(res));//清空答案数组
    scanf("%d %d", &n, &m);
    ; i <= n; i++)
        ; j <= n; j++)
            scanf("%1d", &a[i][j]);//%1d,限字宽,读入方便
    ; i <= m; i++){
        pl = ;//重置pl
        int x, y;
        scanf("%d %d", &x, &y);
        ){//已经有答案
            printf("%d\n", res[x][y]);
            continue;
        }
        dfs(x, y);
        ; j <= pl; j++)
            res[lin[j][]][lin[j][]] = pl; //依据坐标数组,为答案数组填上pl
        printf("%d\n", pl);
    }
    ;
}

[LuoguP1141]01迷宫的更多相关文章

  1. 01迷宫 洛谷 p1141

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...

  2. 洛谷——P1141 01迷宫

    P1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任 ...

  3. 【u115】&&【t031】 01迷宫

    01迷宫(maze01) Time Limit: 1 second Memory Limit: 128 MB [问题描述] 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相 ...

  4. Codevs 1629 01迷宫

    1629 01迷宫 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有一个由01组成的n*n格迷宫,若你位于一格0上,那么你可 ...

  5. luogu P1141 01迷宫 x

    P1141 01迷宫 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任 ...

  6. 洛谷P1141 01迷宫

    题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. 你的任务是:对于给定的迷宫, ...

  7. P1141 01迷宫

    https://www.luogu.org/problemnew/show/P1141 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样 ...

  8. P1141 01迷宫 dfs连通块

    题目描述 有一个仅由数字000与111组成的n×nn \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻444格中的某一格111上,同样若你位于一格1上,那么你可以移动到相邻444格 ...

  9. P1141 01迷宫 DFS (用并查集优化)

    题目描述 有一个仅由数字00与11组成的n \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上 ...

随机推荐

  1. Js内存泄漏的几种情况

    想解决内存泄露问题,必须知道什么是内存泄露,什么情况下出现内存泄露,才能在遇到问题时,逐个排除.这里只讨论那些不经意间的内存泄露. 一.什么是内存泄露 内存泄露是指一块被分配的内存既不能使用,又不能回 ...

  2. java XML解析成Map

    1.需要解析的文件.xml <?xml version="1.0" encoding="UTF-8"?> <request> <r ...

  3. [转]ASP.NET MVC中的两个Action之间值的传递--TempData

    本文转自:ASP.NET MVC中的两个Action之间值的传递--TempData 一. ASP.NET MVC中的TempData 在ASP.NET MVC框架的ControllerBase中存在 ...

  4. git pull冲突报错

    修改代码后在git pull报错: error: Your local changes to the following files would be overwritten by merge: xx ...

  5. C# Attribute应用:类签名

    在应用别人接口的时候,总是要用签名,很是不理解签名这是怎么知道做的.通过对Attribute的学习了解.大体可以用Attribute来做签名应用. 具体过程如下: 首先我们要先定义一个类,该类继承At ...

  6. 菜鸟学习Spring——SpringMVC注解版控制层重定向到控制层

    一.概述. SpringMVC中界面请求Contorller1,Contorller1需要重定向到Contorller2中显示其他页面或者做一些业务逻辑,Spring中提供了这个功能利用"r ...

  7. 16_Queue_利用wait()和notify()编写一个阻塞队列

    [线程间通信概念] 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体必用方式之一.当线程存在通信指挥,线程间的交互性会更强大,在提高CPU利用率的同 ...

  8. windows常用命令集锦

    开始→运行→输入的命令集锦 gpedit.msc-----组策略 sndrec32-------录音机 Nslookup-------IP地址侦测器 explorer-------打开资源管理器 lo ...

  9. Gson 转换hibernate级联对象出现StackOverFlow(堆栈溢出)问题

    < many-to-one>和< one-to-many>属性的对象级联关系在转换时会造成死循环,报stackOverFlowException. 比如下面这段: @OneTo ...

  10. 爬虫入门之jsonPath PhantomJS与 selenium详解(六)

    1 jsonPath数据格式 pip安装: pip install jsonpath 用来解析json格式的字符串,类似于xpath (1) json对象的转换 json.loads() json.d ...