用的是深度优先搜索(DFS)
题目大意:计算不相邻的油田数目,如果油田的上,下,左,右,斜边等八个方向也有油田那么算一块油田
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
char a[105][105];
int m,n;
int k[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};//把所有方位列出来
void f(int p,int q)
{
int i,x,y;
a[p][q]='*';//已搜索过的设为*避免再次搜索到
for(i=0;i<8;i++)
{
x=p+k[i][0];//得出下一个位置的坐标
y=q+k[i][1];
if(x<0||x>m||y<0||y>n)
continue;
if(a[x][y]=='@')
{
f(x,y);//递归,继续搜索
}
}
}
int main()
{
int i,j,z;
while(scanf("%d%d",&m,&n)!=EOF)
{
getchar();
z=0;
if(m==0||n==0)
break;
for(i=0;i<m;i++)
{
scanf("%s",&a[i]);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i][j]=='@')
{
f(i,j);
z++;
}
}
}
printf("%d\n",z);
}
return 0;
}