題目鏈接: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年藍橋杯有個類似的題,不過那個是計算有多少島嶼,這個是計算有多少油井,大同小異。