#include <stdio.h>
int n, m;
int count=0;
char s[1001][1001];
int visited[1001][1001]={0};
int direction[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void dfs(int x,int y)
{
if(x<0||x>=n||y<0||y>=m) return;
if(s[x][y]=='#') return;
if(visited[x][y]==1) return;
visited[x][y]=1;
if(s[x][y]=='!')
{
count++;
}
for(int i=0;i<4;i++)
{
int nx=x+direction[i][0];
int ny=y+direction[i][1];
dfs(nx,ny);
}
}
int main()
{
scanf("%d %d",&n,&m);
int flag_n,flag_m;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf(" %c",&s[i][j]);
if(s[i][j]=='@')
{
flag_n=i;
flag_m=j;
}
}
}
dfs(flag_n,flag_m);
printf("%d",count);
return 0;
}
核心出装:DFS 。

京公网安备 11010502036488号