题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241
分析:题意求的是油田个数,上下左右以及对角,相当于八个方向都算相邻,因此深搜八个方向即可,几乎跟hdu另一个题目一样,详情见上一篇。
- #include<iostream>
- #include<algorithm>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- const int N=105;
- char a[N][N];//存储图
- int dd[8][2]={1,0,0,1,0,-1,-1,0,1,-1,-1,1,1,1,-1,-1};
- int n,m;
- void dfs(int x,int y)
- {
- int i;
- for(i=0;i<8;i++)
- {
- int sx=x+dd[i][0];
- int sy=y+dd[i][1];
- if(sx>=0 &&sx<n&& sy>=0&&sy<m && a[sx][sy]=='@')
- {
- a[sx][sy]='*';//符合条件继续深搜,并且改变状态,直到相邻的全部找出
- dfs(sx,sy);
- }
- }
- }
- int main()
- {
- int i,j,cnt;
- while(scanf("%d%d",&n,&m) &&(n+m))
- {
- getchar();
- memset(a,0,sizeof(a));
- for(i=0;i<n;i++)
- {
- for(j=0;j<m;j++)
- scanf("%c",&a[i][j]);
- getchar();
- }
- cnt=0;//计数
- for(i=0;i<n;i++)
- for(j=0;j<m;j++)
- if(a[i][j]=='@')
- {
- cnt++;
- a[i][j]='*';
- dfs(i,j);
- }
- printf("%d\n",cnt);
- }
- return 0;
- }