题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241
题目大意:*是土地@是油井,油井周围八个坐标点的油井和当前油井相连,相连的油井共同组成一个大油井,输出有多少个大油井
题解:对每个点进行判断,如果是油井,则ans++,并深搜将其所有相连的油井置为*
AC代码:
#include <iostream>
#include"string.h"
using namespace std;
int n,m;
char maze[105][105];
int ans;
void dfs(int x,int y){
if(maze[x][y] == '*') return;
maze[x][y] = '*';
for(int i = -1;i<=1;i++)
for(int j = -1;j<=1;j++)
dfs(x+i,y+j);
}
int main(int argc, char** argv) {
while(cin>>n>>m){
if( n ==0 && n == m) break;
ans = 0;
memset(maze,'*',sizeof(maze));
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
cin>>maze[i][j];
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++){
if(maze[i][j] == '@'){
dfs(i,j);
ans++;
}
}
cout<<ans<<endl;
}
return 0;
}
小结:比较简单的dfs题目,18年蓝桥杯有个类似的题,不过那个是计算有多少岛屿,这个是计算有多少油井,大同小异。