1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <limits.h> 5 #include <algorithm> 6 #include <iostream> 7 #include <ctype.h> 8 #include <iomanip> 9 #include <queue> 10 #include <map> 11 #include <stdlib.h> 12 using namespace std; 13 14 char v[100][100];//油包分布 15 int m,n,i,j; 16 17 void dfs(int x,int y)//当前位置(x,y) 18 { 19 v[x][y]=‘*‘;//将当前位置变为* 20 //将8个方向遍历一遍 21 for(int dx=-1;dx<=1;dx++){ 22 for(int dy=-1;dy<=1;dy++){ 23 int px=x+dx; //移动后的位置 24 int py=y+dy; //移动后的位置 25 //判断(x,y)是否在油田内 且该点是否为油包 26 if(v[px][py]==‘@‘&&px<=n&&py<=m){ //判断是否出界 27 dfs(px,py); 28 29 } 30 } 31 } 32 } 33 34 int main() 35 { 36 while(~scanf("%d%d",&n,&m)){ 37 int sum=0; 38 if(m==0&&n==0) 39 break; 40 for(i=0;i<n;i++) 41 scanf("%s",v[i]); 42 for(i=0;i<n;i++){ 43 for(j=0;j<m;j++){ 44 if(v[i][j]==‘@‘){ 45 dfs(i,j); //从有@的地方开始dfs 46 sum++; 47 } 48 } 49 } 50 printf("%d\n",sum); 51 } 52 }
原文:http://www.cnblogs.com/wangmengmeng/p/5035582.html