Problem: 1562 | User: nasta | |
Memory: 764K | Time: 16MS | |
Language: G++ | Result: Accepted |
相临的‘@’是一个油田,输出有多少个油田。
简单的搜索题,DFS。
#include <iostream>
//#include <fstream>
#include <cstring>
#define SIZE 100
using namespace std;
char f[SIZE][SIZE];
char vis[SIZE][SIZE];
char d[8][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int m, n, ans;
int dfs(int x, int y)
{
if(f[x][y] != '@' || vis[x][y] == 1)
return 1;
vis[x][y] = 1;
for(int i=0; i < 8; ++i)
{
int dx = x + d[i][0];
int dy = y + d[i][1];
dfs(dx, dy);
}
return 1;
}
int main()
{
//freopen("in.txt", "rb+", stdin);
while(cin >> m >> n, m!=0)
{
ans = 0;
memset(f, 0, sizeof(char)*SIZE*SIZE);
memset(vis, 0, sizeof(char)*SIZE*SIZE);
for(int i=0; i < m; ++i)
for(int j=0; j < n; ++j)
cin >> f[i][j];
for(int i=0; i < m; ++i)
for(int j=0; j < n; ++j)
{
if(f[i][j] == '@' && vis[i][j] == 0)
ans += dfs(i, j);
}
printf("%d\n", ans);
}
//fclose(stdin);
return 0;
}