不好意思,格式不对,更正一下,尴尬
```
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int dx[4]={-1,0,1,0};
const int dy[4]={0,-1,0,1};
const int maxn=1010;
int color[maxn][maxn];
int ans[maxn];
int a[maxn][maxn];
bool v[maxn][maxn];//标记数组(相当重要!!!)
int cnt=0;
int bfs(int x,int y)
{
v[x][y]=false;
color[x][y]=cnt;
int s=0;
for(int i=0;i<4;i++)
if(a[x+dx[i]][y+dy[i]]!=-1 && a[x+dx[i]][y+dy[i]]!=a[x][y] && v[x+dx[i]][y+dy[i]]==true)
s=s+bfs(x+dx[i],y+dy[i])+1;//s=自己能到的+别人能到的
return s;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
memset(a,-1,sizeof(a));
memset(v,true,sizeof(v));
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
for(int j=0;j<n;j++)
a[i][j+1]=s[j]-'0';
}
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(color[x][y])
printf("%d\n",ans[color[x][y]]);
else
{
cnt++;
int answer=bfs(x,y)+1;//总数=自己能到的+别人能到的+1(自己也算)
printf("%d\n",answer);
ans[cnt]=answer;
}
}
//system("pause");
return 0;
}
```
by 我去好难啊 @ 2018-02-16 16:43:28
emmmm你确定这不是DFS?
by Loner_Knowledge @ 2018-02-16 17:03:30