题目链接:(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;
}

(HDOJ)-1241-Oil Deposits(油田)【dfs】

相关文章: