#include <cstdio> #include <iostream> #include <string> #include <sstream> #include <cstring> #include <stack> #include <queue> #include <algorithm> #include <cmath> #include <map> #define PI 3.1415926 #define ms(a) memset(a,0,sizeof(a)) #define msp memset(mp,0,sizeof(mp)) #define msv memset(vis,0,sizeof(vis)) using namespace std; //#define LOCAL int n,m,ans; char mp[120][120]; int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}}; void dfs(int x,int y) { for(int i=0;i<8;i++) { int nx=x+dir[i][0],ny=y+dir[i][1]; if(nx<0||ny<0||nx>=n||ny>=m)continue; if(mp[nx][ny]==‘@‘)mp[nx][ny]=‘*‘,dfs(nx,ny); } return; } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); #endif // LOCAL ios::sync_with_stdio(false); while(cin>>n>>m&&n&&m) { msp,ans=0; for(int i=0;i<n;i++)cin>>mp[i]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(mp[i][j]==‘@‘) { mp[i][j]=‘*‘; ans++; dfs(i,j); } } printf("%d\n",ans); } return 0; }
原文:http://www.cnblogs.com/gpsx/p/5180165.html