/*图连通性判断 , 只需用 DFS, 水 */
#include <stdio.h>
#include <string.h>
int map[200][200];
int vis[200][200];
char temp;
void dfs( int x, int y )
{
if( !map[x][y] || vis[x][y] ) return;
vis[x][y] = 1;
dfs(x-1, y-1); dfs(x-1,y); dfs(x-1, y+1);
dfs(x, y-1); dfs(x, y+1);
dfs(x+1, y-1); dfs(x+1, y); dfs(x+1,y+1);
}
int main()
{
int m, n, i, j, cout;
while( scanf( "%d%d", &m, &n ) && m && n )
{
getchar();
cout = 0;
memset( map, 0, sizeof(map) );
memset( vis, 0, sizeof(vis) );
for( i = 1; i <= m; i++ )
{
for( j = 1; j <= n; j++ )
{
scanf( "%c", &temp );
if( temp == '@' )
map[i][j] = 1;
}
getchar();
}
for( i = 1; i <= m; i++ )
for( j = 1; j <= n; j++ )
if( !vis[i][j] && map[i][j] )
{
cout++;
dfs( i, j );
}
printf( "%d\n", cout );
}
return 0;
}
UVA 572
最新推荐文章于 2024-11-24 15:20:01 发布