H - Oil Deposits
思路:找石油,经典dfs,找临边和对角相邻,即找以一个点为中心的八个方向(定义了二维数组记录方向),先找到一个油田(@),将其标记为土地(*)以防重复,再进行遍历搜索该点的相邻点,直到所有的相邻的点被遍历过。若还有点未被访问,再选一个新的点直到所有点被访问。
#include<stdio.h>
#include<string.h>
int m,n,sum;
char z[100][100];
int f[8][2]={0,1,0,-1,1,0,-1,0,-1,-1,1,1,-1,1,1,-1};
void dfs(int i,int j)
{
int k;
for(k=0;k<8;k++)
{
int di=i+f[k][0];
int dj=j+f[k][1];
if(di<0||dj<0||di>=m||dj>=n||z[di][dj]=='*') continue;
z[di][dj]='*';
dfs(di,dj);
}
}
int main()
{
while(~scanf("%d %d",&m,&n))
{
int i,j;
sum=0;
if(m==0) break;
for(i=0;i<m;i++)
{
scanf("%s",z[i]);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(z[i][j]&