poj 1562
题目大意:给出一个地图,‘@’表示存在石油,‘*’表示空白,求出共有多少个油田,相邻的或者是对角线相邻算同一个油田
解决:bfs或者是dfs,本题采用dfs
#include <iostream> using namespace std; int m,n; const int N=105; char map[N][N]; int dx[]={1,-1,0,0,1,1,-1,-1}; int dy[]={0,0,1,-1,1,-1,1,-1}; void dfs(int x,int y) { map[x][y]='*'; for(int i=0;i<8;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=0 && nx<m && ny>=0 && ny<n && map[nx][ny]=='@') dfs(nx,ny); } } int main() { while(cin>>m>>n,m) { int cnt=0; for(int i=0;i<m;i++)cin>>map[i]; for(int i=0;i<m;i++) for(int j=0;j<n;j++) if(map[i][j]=='@') { dfs(i,j); cnt++; } cout<<cnt<<endl; } system("pause"); return 0; }