社区讨论
求助!!!!!!
P114101迷宫参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mi7yumcn
- 此快照首次捕获于
- 2025/11/21 05:51 4 个月前
- 此快照最后确认于
- 2025/11/21 05:51 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
int n,m,anss,vis[1010][1010],mp[1010][1010],ans[1010][1010];
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
char mpp[1010][1010];
struct node {int x,y;} d[1010],qd,top;
void bfs(int x,int y)
{
anss=0;
node bj[1010]; int tot=0;
queue <node> q;
vis[x][y]=1;
anss++;
qd.x=x;
qd.y=y;
q.push(qd);
while(!q.empty())
{
node tmp=q.front();
q.pop();
int x=tmp.x; int y=tmp.y;
for(int i=0;i<=3;i++)
{
int nx=x+dx[i];
int ny=y+dy[i];
if(vis[nx][ny]==1) continue;
if(nx<1||ny<1||nx>n||ny>n) continue;
if(mp[x][y]==mp[nx][ny]) continue;
anss++; vis[nx][ny]=1;
bj[++tot].x=nx; bj[tot].y=ny;
top.x=nx;
top.y=ny;
q.push(top);
}
}
for(int i=1;i<=tot;i++)
{
ans[bj[i].x][bj[i].y]=anss;
}
ans[x][y]=anss;
}
int main()
{
for(int i=1;i<=1005;i++)
for(int j=1;j<=1005;j++) ans[i][j]=1;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",&mpp[i]);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(mpp[i][j-1]=='1') mp[i][j]=1;
else mp[i][j]=0;
}
for(int i=1;i<=m;i++)
{
int x,y; scanf("%d%d",&x,&y);
if(ans[x][y]!=1) printf("%d\n",ans[x][y]);
else bfs(x,y),printf("%d\n",ans[x][y]);
}
return 0;
}
不知道为什么一直要WA3个点。。。。
回复
共 2 条回复,欢迎继续交流。
正在加载回复...