HDU 1241 Oil Deposits(DFS)

这道题是一个比较水的搜索题,思路就是先找到一块油田,然后找这块油田周围的油田,这样组成了一大块油田,看一共有多少大块油田,输出。

附代码如下:

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int  maxn = 110;
int vis[maxn][maxn],m,n;
int mv[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
char s[maxn][maxn];
void dfs(int x,int y)
{
	for(int i = 0;i < 8; i++)
	{
		int next_x = x + mv[i][0];
		int next_y = y + mv[i][1];
		if(next_x >= 0 && next_x < m && next_y >= 0 && next_y < n && vis[next_x][next_y] == 0)
		{
			
			if(s[next_x][next_y] == '@')
			{
				vis[next_x][next_y] = 1;
				dfs(next_x,next_y);
			}
		}
	}
}
int main()
{
	while(1)
	{
		scanf("%d %d",&m,&n);
		getchar();
		if(m == 0 && n == 0)	break;
		int sum = 0;
		memset(vis,0,sizeof(vis));
		for(int i = 0;i < m; i++)
		{
			scanf("%s",s[i]);
			getchar();
		}
		for(int i = 0;i < m; i++)
		{
			for(int j = 0;j < n; j++)
			{
				if(s[i][j] == '@' && !vis[i][j])
				{
					dfs(i,j);
					sum++;
				}
			}
		}
		printf("%d\n",sum);
	}
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/xiao__hei__hei/article/details/84558649