洛谷 P1141 01迷宫

简介: 洛谷 P1141 01迷宫

题目描述

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

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


输入格式

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

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

输出格式

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

输入输出样例

输入

2 2

01

10

1 1

2 2

输出

4

4


说明/提示

所有格子互相可达。

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

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

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

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

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

#include<bits/stdc++.h>
using namespace std;
const int M=1010;
int n,m;
int vis[M][M];
bool mp[M][M];
int xx[]={0,1,-1,0};
int yy[]={1,0,0,-1};
int color,cnt,ans[1000010];
void bfs(int x,int y)
{
  queue<int>h;
  queue<int>l;
  h.push(x);
  l.push(y);
  vis[x][y]=color;
  while(!l.empty())
  {
    for(int i=0;i<4;i++)
    {
      int dx=h.front()+xx[i];
      int dy=l.front()+yy[i];
      if(dx>=1&&dx<=n&&dy>=1&&dy<=n&&!vis[dx][dy]&&mp[dx][dy]!=mp[h.front()][l.front()])
      {
        h.push(dx);
        l.push(dy);
        vis[dx][dy]=color;
      }
    }
    h.pop();
    l.pop();
    cnt++;
  }
}
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=n;j++)
    {
      char x;
      cin>>x;
      if(x=='1') mp[i][j]=1;
      else mp[i][j]=0;
    }
  }
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=n;j++)
    {
      if(!vis[i][j])
      {
        color++;
        bfs(i,j);
        ans[color]=cnt;
        cnt=0;
      }
    }
  }
  for(int i=1;i<=m;i++)
  {
    int x,y;
    cin>>x>>y;
    cout<<ans[vis[x][y]]<<endl;
  }
  return 0;
}
目录
相关文章
|
小程序 C#
C#WinForm实现Loading等待界面
上篇博客中解决了程序加载时屏幕闪烁的问题。 但是,加载的过程变得很缓慢。 这个给用户的体验也不是很好,我这里想加一个Loading的进度条。 项目启动的时候,加载进度条,界面UI加载完毕,进度条消失。
980 0
|
XML Java 数据库连接
MyBatis深入探索:原生API与注解方式实现CRUD操作
MyBatis深入探索:原生API与注解方式实现CRUD操作
330 0
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
存储 数据采集 人工智能
面向AGI时代的数据存储、管理与应用
本次分享由阿里云智能集团解决方案架构师王太平主讲,主题为面向AGI时代的数据存储、管理与应用。内容涵盖AGI的演进、人工智能发展的关键因素、开发框架对存储基础设施的挑战、数据预处理、大数据训练、微调、推理及落地过程。重点讨论了阿里云在数据存储和管理方面的设计与实践,包括高性能存储、成本优化和数据安全检测等功能,旨在应对AI时代的复杂需求。
409 15
|
存储 IDE 开发工具
编写Python参考手册速查软件(一)
编写Python参考手册速查软件(一)
231 1
阿里云容器服务 ACK 产品技术动态(202312)
阿里云容器服务 ACK 产品技术动态(202312)
|
消息中间件 缓存 前端开发
JS案例:实现一个简单的任务队列-TaskQueue
JS案例:实现一个简单的任务队列-TaskQueue
1002 0
JS案例:实现一个简单的任务队列-TaskQueue
|
存储 算法 Python
Python图论实战:从零基础到精通DFS与BFS遍历,轻松玩转复杂网络结构
【7月更文挑战第11天】图论在数据科学中扮演关键角色,用于解决复杂网络问题。Python因其易用性和库支持成为实现图算法的首选。本文通过问答形式介绍DFS和BFS,图是节点和边的数据结构,遍历用于搜索和分析。Python中图可表示为邻接表,DFS用递归遍历,BFS借助队列。DFS适用于深度探索,BFS则用于最短路径。提供的代码示例帮助理解如何在Python中应用这两种遍历算法。开始探索图论,解锁更多技术可能!
461 6
【洛谷 P1443】马的遍历 题解(广度优先搜索)
该问题是一个棋盘上的马的最短路径问题。给定一个$n\times m$的棋盘和起点$(x, y)$,需要计算马到达棋盘上每个位置的最短步数。输入包含$n, m, x, y$,输出是一个矩阵,表示各位置的步数或未可达的$-1$。使用广度优先搜索(BFS)策略,从起点开始遍历,直到访问完所有可达位置。代码中定义了太阳数组表示马的移动方向,并通过队列实现BFS。最后输出格式要求每个数字左对齐且域宽为5。
358 0
|
资源调度 Kubernetes 应用服务中间件
Deployment的创建、滚动更新、回滚版本、扩容缩容
Deployment的创建、滚动更新、回滚版本、扩容缩容
690 1