dfs搜索,统计连通块数量
#include <cstdio>
#include <iostream>
#include <string.h>
#define MAX 100 + 10
using namespace std;
char MGraph[MAX][MAX];
int dir[8][2] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 },
{ 0, 1 }, { 1, -1 }, { 1, 0 }, { 1, 1 } };
int visit[MAX][MAX];
int n, m, ans;
void dfs( int x, int y ) {
visit[x][y] = 1;
for( int i = 0; i < 8; i++ ) {
int newX = x + dir[i][0];
int newY = y + dir[i][1];
if( newX >= 0 && newX < n && newY >= 0 && newY < m &&
visit[newX][newY] == 0 && MGraph[newX][newY] == '@' ) {
dfs( newX, newY );
}
}
}
int main() {
while( scanf( "%d%d", &n, &m ) != EOF ) {
if( n == 0 && m == 0 ) break;
for( int i = 0; i < n; i++ ) {
scanf( "%s", &MGraph[i] );
}
ans = 0;
memset( visit, 0, sizeof( visit ) );
for( int i = 0; i < n; i++ ) {
for( int j = 0; j < m; j++ ) {
if( !visit[i][j] && MGraph[i][j] == '@' ) {
ans++;
dfs( i, j );
}
}
}
printf( "%d\n", ans );
}
return 0;
}