有没有大佬看一下50分求助!!1
  • 板块P1141 01迷宫
  • 楼主hukkk
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/3/4 21:43
  • 上次更新2023/11/5 02:27:45
查看原帖
有没有大佬看一下50分求助!!1
470031
hukkk楼主2021/3/4 21:43
#include<bits/stdc++.h>
using namespace std;
char a[1002][1002];
int dis[4][2]={{1,0},{-1,0},{0,-1},{0,1}},n,m;
int vis[1002][1002];
struct node
{
	int x,y;	
}arr[1000001];
bool check(node nex)
{
	if(nex.y<0||nex.x<0||nex.y>n||nex.x>n||vis[nex.y][nex.x]==1)
	return true;
	else return false;
}
int bfs(node start)
{
	node cur,nex;
	int sum=1;
	memset(vis,0,sizeof(vis));
	vis[start.y][start.x]=1;
	queue<node>q;
	q.push(start);
	while(!q.empty())
	{
		cur=q.front();
		q.pop();
		if(a[cur.y][cur.x]=='1')
		{
			for(int i=0;i<4;i++)
			{
				nex.y=cur.y+dis[i][0];
				nex.x=cur.x+dis[i][1];
				if(check(nex)) continue;
				if(a[nex.y][nex.x]=='0')
				{
					vis[nex.y][nex.x]=1;
					sum++;
					q.push(nex);
				}
			}
		}
		if(a[cur.y][cur.x]=='0')
		{
			for(int i=0;i<4;i++)
			{
				nex.y=cur.y+dis[i][0];
				nex.x=cur.x+dis[i][1];
				if(check(nex)) continue;
				if(a[nex.y][nex.x]=='1')
				{
					vis[nex.y][nex.x]=1;
					sum++;
					q.push(nex);
				}
			}
		}
	}
	return sum;
}
int main()
{
	int i,j,sum[i];
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=n;j++)
		{
			cin>>a[i][j];
		}
	}
	for(i=1;i<=m;i++)
	{
		scanf("%d%d",&arr[i].y,&arr[i].x);
	}
	for(i=1;i<=m;i++)
	{
		sum[i]=bfs(arr[i]);
	}
	for(i=1;i<=m;i++)
	printf("%d\n",sum[i]);
	return 0;
}
2021/3/4 21:43
加载中...