POJ-1562-Oil Deposits

来源:互联网 发布:中学点读软件 编辑:程序博客网 时间:2024/05/16 10:21

这个题就是说以@代表油田,它周边8个方向若有@则表示同一个油田。给你一个图,问你图中有多少个油田。

算是比较简单的DFS题,直接进行搜索, 只是注意对已经搜索过的点进行标记操作。

代码:

#include<cstdio>#include<cstring>#include<iostream>#define MAX 101using namespace std;int n,m,ans;char map[MAX][MAX];bool vis[MAX][MAX];int movex[8]={1,1,1,-1,-1,-1,0,0},movey[8]={1,0,-1,1,0,-1,1,-1};bool isborder(int x,int y){    if(x<0||x>=n||y<0||y>=m)return true;    return false;}void DFS(int x,int y){    if(isborder(x,y)||map[x][y]=='*')return;    for(int i=0;i<8;i++)    {int itx=x+movex[i];int ity=y+movey[i];if(isborder(itx,ity)||vis[itx][ity])    continue;vis[itx][ity]=1;if(map[itx][ity]=='@')    DFS(itx,ity);    }}int main(){    while(scanf("%d%d",&n,&m)&&(n||m))    {for(int i=0;i<n;i++)    scanf("%s",&map[i]);memset(vis,0,sizeof(vis));ans=0;for(int i=0;i<n;i++)    for(int j=0;j<m;j++)if(!vis[i][j]&&map[i][j]!='*'){    DFS(i,j);    ans++;}printf("%d\n",ans);    }    return 0;}


原创粉丝点击