00000
00*00
0*0*0
00*00
樣例輸出
//
// main.cpp
// DFS-拯救OIBH總部
//
// Created by showlo on 2018/4/19.
// Copyright © 2018年 showlo. All rights reserved.
//
#include <stdio.h>
#include <algorithm>
#include <math.h>
using namespace std;
#define max 1000
int m,n;
char a[max][max];
int vis[max][max];
void dfs(int x,int y){
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
if (a[x][y]=='*'||vis[x][y]==1||x<0||x>=m||y<0||y>=n)
return ;
else{
// printf("%d %d\n",x,y);
vis[x][y]=1;
for(int i=0;i<4;i++)
dfs(x+dx[i], y+dy[i]);
}
return;
}
int main() {
int i,j,ans=0;
scanf("%d %d",&n,&m);
memset(vis, 0, sizeof(vis));
for (i=0; i<m; i++) {
scanf("%s",a[i]);
}
for (i=0; i<m; i++) {
if (a[i][0]!='*'&&vis[i][0]==0)
dfs(i,0);
if (a[i][n-1]!='*'&&vis[i][n-1]==0)
dfs(i,n-1);
}
for (i=1; i<n-2; i++) {
if (a[0][i]!='*'&&vis[0][i]==0)
dfs(0,i);
if (a[m-1][i]!='*'&&vis[m-1][i]==0)
dfs(m-1,i);
}
for (i=0; i<n; i++) {
for (j=0; j<m; j++) {
if (a[i][j]=='0'&&vis[i][j]==0) {
ans++;
}
}
}
printf("%d\n",ans);
return 0;
}