链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1709
题意:*代表地里没有油,@代表地里有油。某块地如果在它的相邻八个方向上的地里也有油,那么它们是属于同一块油田,求油田数。
思路:从某个有油的田开始搜,搜过了就标记为*,以免后面再搜,然后统计。
#include<iostream> #include<cstdio> using namespace std; int m,n; const int maxn=102; char grid[maxn][maxn]; int dir[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}}; void dfs(int x,int y) { grid[x][y]='*'; int xx,yy; for(int i=0;i<8;i++) { xx=x+dir[i][0];yy=y+dir[i][1]; if(xx>=0 && xx<=m-1 &&yy>=0 && yy<=n-1 && grid[xx][yy]=='@') dfs(xx,yy); // if(xx<0 || xx>=m || yy<0 || yy>=n) continue; // if(grid[xx][yy]=='@') dfs(xx,yy); } } int main() { int cnt; while(scanf("%d%d",&m,&n) && m) { cnt=0; scanf("%d%d",&m,&n); if(m==0) break; for(int i=0;i<m;i++) scanf("%s",grid[i]); for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(grid[i][j]=='@') { dfs(i,j); cnt++; } printf("%d\n",cnt); } return 0; }