题意:
给出油田的数量,八连通的“@”认为是一个油田。和POJ 2386 Lake Counting这个题几乎一样。
直接上代码:
#include<iostream> using namespace std; char maze[105][105]; int n,m; void dfs(int x,int y) { maze[x][y]='*'; for(int dx=-1;dx<=1;dx++) for(int dy=-1;dy<=1;dy++) { int nx=x+dx,ny=y+dy; if(0<=nx&&nx<n&&0<=ny&&ny<m&&maze[nx][ny]=='@') { dfs(nx,ny); } } } int main() { while(cin>>n>>m,n||m) { for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>maze[i][j]; int ans=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(maze[i][j]=='@') { dfs(i,j); ans++; } } cout<<ans<<endl; } return 0; }