P1141 01迷宫
#include<bits/stdc++.h>
using namespace std;
int mp[1005][1005],u,sum,v,n,m,s,e,dx[4]= {1,-1,0,0},dy[4]= {0,0,1,-1},ans[1005][1005],cs[1000005][2];
bool sign[1005][1005];
char ch[1005];
void dfs(int x,int y)
{
sum++;
cs[sum][0]=x,cs[sum][1]=y;
for(int i=0; i<4; i++)
{
u=x+dx[i],v=y+dy[i];
if(!sign[u][v]&&mp[u][v]!=mp[x][y]&&u>0&&u<=n&&v>0&&v<=n)
{
sign[u][v]=1;
dfs(u,v);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%s",ch);
for(int j=0; j<n; j++)
mp[i][j+1]=ch[j]-'0';
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
if(!sign[i][j])
{
sum=0;
sign[i][j]=1;
dfs(i,j);
for(int k=1; k<=sum; k++)
ans[cs[k][0]][cs[k][1]]=sum;
}
for(int i=1; i<=m; i++)
{
scanf("%d%d",&s,&e);
printf("%d
",ans[s][e]);
}
return 0;
}