#include <iostream> #include <vector> using namespace std; int m,n; vector<vector<int>>res={{0,1},{0,-1},{1,0},{-1,0}}; void fill_water(vector<vector<int>>&memo,int i,int j){ for(int k=0;k<4;++k){ int x=i+res[k][0],y=j+res[k][1]; if(x>=0&&x<m&&y>=0&&y<n&&memo[x][y]==0){ memo[x][y]=2; fill_water(memo, x, y); } } } void fill_land(vector<vector<int>>&memo,int i,int j){ for(int k=0;k<4;++k){ int x=i+res[k][0],y=j+res[k][1]; if(x>=0&&x<m&&y>=0&&y<n&&(memo[x][y]==0||memo[x][y]==1)){ memo[x][y]=3; fill_land(memo, x,y); } } } int main() { cin>>m>>n; vector<vector<int>>memo(m,vector<int>(n)); for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ cin>>memo[i][j]; } } // 先填满水域 for(int j=0;j<n;++j){ if(memo[0][j]==0){ memo[0][j]=2; fill_water(memo,0,j); } } for(int i=1;i<m;++i){ if(memo[i][0]==0){ memo[i][0]=2; fill_water(memo,i,0); } if(memo[i][n-1]==0){ memo[i][n-1]=2; fill_water(memo,i,n-1); } } // 再填满有效陆域 for(int j=0;j<n;++j){ if(memo[m-1][j]==1){ memo[m-1][j]=3; fill_land(memo,m-1,j); } } int sum=0; for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ if(memo[i][j]==3){ sum+=1; } } } cout<<sum<<endl; } // 64 位输出请用 printf("%lld")