https://vjudge.net/contest/205707#problem/L
题目地址在这里
特别简单的深搜题,从头开始遍历,每找到一个@油田数加1,然后用深搜把这块油田里的其他@都标记成1,防止后面找重。
#include<stdio.h>
int m,n;
int xc[]={0,0,-1,1,1,-1,1,-1};
int yc[]={1,-1,0,0,1,-1,-1,1};
char map[101][101];
void dfs(int x,int y);
int main()
{
int i,j,cnt;
while(1)
{
scanf("%d",&m);
if(m==0)
{
return 0;
}
scanf("%d",&n);
for(i=1;i<=m;i++)
{
getchar();
for(j=1;j<=n;j++)
{
scanf("%c",&map[i][j]);
}
}
cnt=0;
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
if(map[i][j]=='@')
{
cnt++;
map[i][j]='1';
dfs(i,j);
}
}
}
printf("%d\n",cnt);
}
}
void dfs(int x,int y)
{
int xn,yn;
for(int i=0;i<8;i++)
{
xn=x+xc[i];
yn=y+yc[i];
if(xn<1||yn<1||xn>m||yn>n) continue;
if(map[xn][yn]=='@')
{
map[xn][yn]='1';
dfs(xn,yn);
}
}
}