1. 程式人生 > >HDU 1241 Oil Deposits(DFS)

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;
}