专栏文章
查错
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqsai5z
- 此快照首次捕获于
- 2025/12/04 09:55 3 个月前
- 此快照最后确认于
- 2025/12/04 09:55 3 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1005;
char a[N][N];
int n, m, vis[N][N], dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1}, qx, qy, l, sum[N * N], b[N][N];
struct node{
int x, y;
};
bool check(int x, int y, int l1, int l2)
{
if(x < 1 || x > n || y < 1 || y > n)
return 1;
else if(vis[x][y] || a[x][y] == a[l1][l2])
return 1;
return 0;
}
void bfs()
{
queue<node>q;
b[qx][qy] = l;
q.push({qx, qy});
vis[qx][qy] = 1;
while(q.size())
{
node t = q.front();
q.pop();
sum[l] ++;
for(int i = 0 ;i < 4; ++ i)
{
int px = t.x + dx[i], py = t.y + dy[i];
if(check(px, py, t.x, t.y))
continue;
vis[px][py] = 1;
b[px][py] = l;
q.push({px, py});
}
}
return ;
}
signed main()
{
cin >> n >> m;
for(int i = 1; i <= n; ++ i)
{
for(int j = 1; j <= n; ++ j)
{
cin >> a[i][j];
}
}
for(int i =1 ;i <= n; ++ i)
{
for(int j = 1; j<= n; ++ j)
{
if(!vis[i][j])
{
int qx = i, qy = j, l = l + 1;
bfs();
}
}
}
while(m --)
{
int x, y;
cin >> x >> y;
cout << sum[b[x][y]] << "\n";
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...