【题目描述】(bb.cpp)
乐乐在一个旅游景点,他需要你找出地图中所有的平地,乐乐对平地的定义是这样的:平地是一块连通的并且高度都相同区域。
乐乐希望知道平地的个数。
保证不会出现一块大平地——不会出现每个小区域高度都相同的情况。
问题:给出N*M格的每格的高度信息,求出平地个数。
【输入】
第一行两个整数N,M。
接着N行,每行有M个数字,表示高度信息,之间用一个空格隔开。
【输出】
输出一行一个整数,表示平地个数。
【样例输入1】
2 2
1 2
1 1
【样例输出1】
2
【样例输入2】
3 4
1 3 2 6
1 2 2 7
3 2 2 5
【样例输出2】
7
【数据规模】
对于20%的数据: N,M ≤ 10。
对于60%的数据: N,M ≤ 100。
对于100%的数据: N,M ≤ 1000;高度信息 ≤ 1000000000。
为什么我运行时错误0分
#include <bits/stdc++.h>
#define int long long
#pragma GCC optimize("02")
using namespace std;
const int e[4][2]={-1,0,1,0,0,-1,0,1};
int n,m,i,j,s,a[1010][1010],f[1010][1010],b[1000010],c[1000010];
int bfs(int x,int y,int z){
int fx,fy,i,t,w,sx,sy;
t=w=1;b[1]=x;c[1]=y;
while(t<=w){
fx=b[t];fy=c[t];
for(i=0;i<4;i++){
sx=fx+e[i][0];sy=fy+e[i][1];
if(sx<1||sy<1||sx>n||sy>m) continue;
if(f[sx][sy]==1) continue;
if(a[sx][sy]==z)w++,b[w]=sx,c[w]=sy,f[sx][sy]=1;
}
t++;
}
}
main(){
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(!f[i][j]) bfs(i,j,a[i][j]),s++;
cout<<s;
return 0;
}