社区讨论

求助!!!!!!

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 条回复,欢迎继续交流。

正在加载回复...