OutputFor each grid, output the number of distinct oil deposits. Two different pockets are part of the same oil deposit if they are adjacent horizontally, vertically, or diagonally. An oil deposit will not contain more than 100 pockets.
Sample Input
1 1 * 3 5 *@*@* **@** *@*@* 1 8 @@****@* 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 0 0Sample Output
0 1 2 2
遍歷八個方向....
代碼
#include <iostream>
#include <cstring>
using namespace std;
int n,m;
char a[110][110];
int book[110][110],ans;
int dx[] = {-1,-1,-1,0,0,1,1,1};
int dy[] = {-1,0,1,-1,1,-1,0,1};
void dfs(int x,int y)
{
for(int i = 0;i<8;i++)
{
int xx = x + dx[i];
int yy = y + dy[i];
if(xx >= 0 && xx < n && yy >= 0 && yy < m && a[xx][yy] == '@' && book[xx][yy] == 0)
{
book[xx][yy] = 1;
dfs(xx,yy);
}
}
}
int main()
{
while(cin >> n >> m)
{
if(n == 0 && m == 0)
break;
ans = 0;
memset(book,0,sizeof(book));
for(int i = 0;i<n;i++)
for(int j = 0;j<m;j++)
cin >> a[i][j];
for(int i = 0;i<n;i++)
{
for(int j = 0;j<m;j++)
{
if(a[i][j] == '@' && book[i][j] == 0)
{
ans++;
dfs(i,j);
}
}
}
cout<<ans<<endl;
}
}