题意:*为空的,@为油田,找出连接在一起的油田共有多少块
传统的深搜DFS
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 105
char map[N][N];
int vis[N][N], cnt, n, m;
int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[] = {1, -1, 0, 1, -1, 0, 1, -1};
void dfs(int x, int y){
vis[x][y] = 1;
for(int i = 0; i < 8; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if(tx >= 0 && tx < n && ty >= 0 && ty < m && map[tx][ty] == '@' && !vis[tx][ty])
dfs(tx, ty);
}
return;
}
int main(){
while(cin>>n>>m && n && m){
cnt = 0;
memset(vis, 0, sizeof(vis));
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
cin>>map[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
if(map[i][j] == '@' && !vis[i][j])
{
dfs(i, j);
cnt++;
}
printf("%d\n", cnt);
}
return 0;
}