题目要求:求油田个数(直接相邻或对角相邻的@ 算一个油田)
解题感悟:
1. 这道题使用了利用了DFS的思想;
2. 填充的方法着实不错~~。
#include<stdio.h>
#include<string.h>
#define MAXN 105
char plot[MAXN][MAXN];
void dfs(int i,int j);
int main(void){
int i,j;
int row,col,sum;
while(scanf("%d %d",&row,&col) && row && col){
memset(plot,'*',sizeof(plot)); //将方阵每次初始化为'*'阵
for(i=1;i<=row;++i) //输入方阵
scanf("%s",plot[i]+1);
for(i = 1,sum = 0;i <= row; ++i) //遍历方阵
for(j = 1;j <= col; ++j)
if(plot[i][j]=='@'){
sum++; //油田+1
dfs(i,j); //将与(i,j)相连的油田全填充为'*';
}
printf("%d\n",sum);
}
return 0;
}
//油田填充
void dfs(int i,int j){
plot[i][j]='*';
int m,n;
for(m=-1;m<2;++m)
for(n=-1;n<2;++n){
if(plot[i+m][j+n]=='@'){
plot[i+m][j+n]='*';
dfs(i+m,j+n);
}
}
}