#include<bits/stdc++.h>
using namespace std;
int i,j,n,m,xx,yy,zo,shu,zoo,a,b;
char t[1001][100001];
bool tt[1001][100001];
int zx[1001][100001];
int zy[1001][100001];
int su[1001][100001];
int yi(int x,int y)
{
if(tt[x+1][y]&&t[x][y]!=t[x+1][y]&&x+1<=n)
{
zx[x+1][y]=zx[x][y];
zy[x+1][y]=zy[x][y];
tt[x+1][y]=false;zo=zo-1;
yi(x+1,y);
}
if(tt[x][y+1]&&t[x][y]!=t[x][y+1]&&y+1<=n)
{
zx[x][y+1]=zx[x][y];
zy[x][y+1]=zy[x][y];
tt[x][y+1]=false;zo=zo-1;
yi(x,y+1);
}
if(tt[x-1][y]&&t[x][y]!=t[x-1][y]&&x-1>0)
{
zx[x-1][y]=zx[x][y];
zy[x-1][y]=zy[x][y];
tt[x-1][y]=false;zo=zo-1;
yi(x-1,y);
}
if(tt[x][y-1]&&t[x][y]!=t[x][y-1]&&y-1>0)
{
zx[x][y-1]=zx[x][y];
zy[x][y-1]=zy[x][y];
tt[x][y-1]=false;zo=zo-1;
yi(x,y-1);
}
}
int main()
{
cin>>n>>m;
zo=n*n;shu=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>t[i][j];
zx[i][j]=i;zy[i][j]=j;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
tt[i][j]=true;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(tt[i][j])
{
zoo=zo;
zo=zo-1;
yi(i,j);su[i][j]=zoo-zo;
}
}
}
for(int i=1;i<=m;i++)
{
cin>>a>>b;
if(su[zx[a][b]][zy[a][b]]==1)
{
cout<<1<<endl;
}else{
cout<<su[zx[a][b]][zy[a][b]]-1<<endl;
}
}
return 0;
}
我自己的代码我自己都不知道原理是什么。最后的输出为什么要-1呢?