Oil Deposits

来源:互联网 发布:域名模糊查询 编辑:程序博客网 时间:2024/06/06 07:20

紫书上面的例题

一个关于油田联通块的问题,书上用的是递归的dfs搜索,悄悄记录一下

*     *     *     *   @
*     @   @   *   @
*     @    *    *   @
@   @   @   *  @
@   @    *    *  @

#include<cstdio>#include<cstring>const int maxn = 100 + 5;char pic[maxn][maxn];int m, n, idx[maxn][maxn];void dfs(int r,int c,int id){if(r < 0 || r >=m || c<0 ||c>=n)return;if(idx[r][c]>0 ||pic[r][c]!='@')return ;idx[r][c] = id;for(int dr = -1; dr <= 1;dr++)//关于下一个寻找的方向{for(int dc =-1; dc <= 1; dc++){if(dr!=0 || dc!=0){dfs(r+dr,c+dc,id);}}}}int main(){while(scanf("%d%d",&m,&n) == 2 && m && n){for(int i = 0;i<m;i++)scanf("%s",pic[i]);memset(idx,0,sizeof(idx));int cnt = 0;for(int i = 0; i < m;i++){for(int j = 0;j <n;j++){if(idx[i][j]==0 && pic[i][j] == '@')dfs(i,j,++cnt);}}printf("%d\n",cnt);}return 0;}
还有一种记录方向的方法,代码如下;

int dir[8][2] = {{-1,0},{-1,1},{0,1},{1,1},                   { 1,0},{1,-1},{0,-1},{-1,-1}};