大佬们帮帮忙
  • 板块P1141 01迷宫
  • 楼主1901吴昊
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/10/11 22:08
  • 上次更新2023/11/4 04:01:58
查看原帖
大佬们帮帮忙
253453
1901吴昊楼主2021/10/11 22:08

第二个测试点有问题, 救命!

#include <bits/stdc++.h>
using namespace std;
char a[1005][1005]; 
int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}},b[1005][1005],c[100005];
int ans,n;
struct DOT {
    int x,y;
} d1,d2,d3;
void bfs(int si,int sj)
{
	int s=1;
	ans++;
	queue<DOT> q;
	d1.x=si;
	d1.y=sj;
	q.push(d1);
	b[si][sj]=ans;
	while (!q.empty())
	{
		d2=q.front();q.pop();
		for (int j=0;j<4;j++)
		{
			int ni=d2.x+d[j][0];
			int nj=d2.y+d[j][1];
			if (ni>0&&ni<=n&&nj>0&&nj<=n&&b[ni][nj]==0&&a[d2.x][d2.y]!=a[ni][nj])
			{
				d3.x=ni;d3.y=nj;
				q.push(d3);
				b[ni][nj]=ans;
  				s++;
			}
		}
    }
    c[ans]=s;
}

int main() {

freopen("P1141_2.in","r",stdin);
freopen("P1141_2.txt","w",stdout);

    int m,i,j,x,y;
    cin>>n>>m;
    for (i=1;i<=n;i++) {
        for (j=1;j<=n;j++) {
            cin>>a[i][j];
        }
    }
    for (i=1;i<=n;i++) {
        for (j=1;j<=n;j++) {
            if(b[i][j]==0)
			{
				bfs(i,j);
			}
        }
    }
    for(int i=1;i<=m;i++)
    {
    	cin>>x>>y;
    	cout<<c[b[x][y]]<<endl;
	}
    return 0;
}

测试点放在下面了(输入) 链接: 百度网盘链接 提取码: xq3u

2021/10/11 22:08
加载中...