题目链接:(HDOJ)-1241-Oil Deposits(油田)
题目和 (POJ)-2386-Lake Counting (湖计数)一样属于求连通块
代码:
#include<iostream>
using namespace std;
int N,M;//mapp长宽
char mapp[105][105];
int nextt[8][2]={//方向
{ 0, 1}
, { 1, 1}
, { 1, 0}
, { 1,-1}
, { 0,-1}
, {-1,-1}
, {-1, 0}
, {-1, 1}
, };
void dfs(int x,int y)
{
for(int i=0;i<8;i++)
{
int gx=x+nextt[i][0];
int gy=y+nextt[i][1];
if(gx>=0 && gx<N && gy>=0 && gy<M && mapp[gx][gy]=='@' )
{
mapp[gx][gy]='*';
dfs(gx,gy);
}
}
}
int main()
{
while(~scanf("%d%d",&N,&M) && N||M)
{
int count=0;
for(int i=0;i<N;i++)
{//输入数组mapp
for(int j=0;j<M;j++)
{
cin>>mapp[i][j];
}
}
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
if(mapp[i][j]=='@')
{
count++;
dfs(i,j);
}
}
}
cout<<count<<endl;
}
return 0;
}