洛谷 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加载完毕,进度条消失。
688 0
阿里云容器服务 ACK 产品技术动态(202312)
阿里云容器服务 ACK 产品技术动态(202312)
|
存储 算法 Python
Python图论实战:从零基础到精通DFS与BFS遍历,轻松玩转复杂网络结构
【7月更文挑战第11天】图论在数据科学中扮演关键角色,用于解决复杂网络问题。Python因其易用性和库支持成为实现图算法的首选。本文通过问答形式介绍DFS和BFS,图是节点和边的数据结构,遍历用于搜索和分析。Python中图可表示为邻接表,DFS用递归遍历,BFS借助队列。DFS适用于深度探索,BFS则用于最短路径。提供的代码示例帮助理解如何在Python中应用这两种遍历算法。开始探索图论,解锁更多技术可能!
333 6
|
消息中间件 缓存 前端开发
JS案例:实现一个简单的任务队列-TaskQueue
JS案例:实现一个简单的任务队列-TaskQueue
809 0
JS案例:实现一个简单的任务队列-TaskQueue
|
自然语言处理 安全 Linux
干货 | Elasticsearch 8.X 版本升级指南
干货 | Elasticsearch 8.X 版本升级指南
|
Linux 数据处理
什么是零拷贝
什么是零拷贝
|
存储 开发框架 Nacos
SpringCloud微服务实战——搭建企业级开发框架(十七):Sentinel+Nacos配置持久化
Sentinel Dashboard中添加的规则是存储在内存中的,我们的微服务或者Sentinel一重启规则就丢失了,现在我们将Sentinel规则持久化配置到Nacos中,在Nacos中添加规则,然后同步到Sentinel Dashboard服务中。Sentinel 支持以下几种规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则 和 热点参数规则。具体可查看官网 Sentinel 规则
529 57
SpringCloud微服务实战——搭建企业级开发框架(十七):Sentinel+Nacos配置持久化
|
C++
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(二)
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
245 0
|
前端开发
【(不用Ajax)解决 Layui 插件分页点下一页后又自动跳回前一页的问题】
【(不用Ajax)解决 Layui 插件分页点下一页后又自动跳回前一页的问题】
304 0
|
大数据
数字青岛,我们来了!
数字青岛,我们来了!
413 0