洛谷 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;
}
目录
相关文章
|
6月前
【洛谷 P2089】烤鸡(深度优先搜索)
## 摘要: 猪猪Hanke的烤鸡问题要求找出所有配料组合,使得$10$种配料(每种$1$到$3$克)的总和等于给定美味程度$n$。输入为正整数$n$,输出为方案总数及所有符合条件的配料分配,按字典序排列。样例输入$11$,输出$10$种方案。代码采用递归搜索,先计数再打印方案。$n\leq5000$时保证数据覆盖。
33 0
|
2月前
acwing 1076 迷宫问题
acwing 1076 迷宫问题
14 0
|
2月前
acwing 1112 迷宫
acwing 1112 迷宫
15 0
|
7月前
|
算法 C语言
每日一题——迷宫问题(I)
每日一题——迷宫问题(I)
|
机器学习/深度学习
1215:迷宫
1215:迷宫
110 0
|
算法 定位技术 C++
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
567 6
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
洛谷P1605:迷宫
洛谷P1605:迷宫
88 0
AcWing——方格迷宫(有点不一样的迷宫问题)
AcWing——方格迷宫(有点不一样的迷宫问题)
95 0