hdu 1241 oil deposits

来源:互联网 发布:top域名怎么备案 编辑:程序博客网 时间:2024/06/06 04:48

搜索一直学的很水= =

有时灵光有时不灵光= =

决定花两天时间复习一下,把以前水过的题目再整理整理,别贱笑了...

题目意思很简单,问有几片油田(只要某点的八个临位上也有‘@’就表示两者是连在一起的,算一块)

很简单的DFS,入门级别,只要先找到一个‘@’然后深搜下去,就行,直接代码

(这题有个问题,输入的时候要读掉多余的空行= =麻烦,一开始还没发现)

#include <iostream>#include <cstring>#include <cstdio>#include <string>#include <algorithm>using namespace std;int m,n;char map[101][101];int dir[8][2]={{1,0},{1,1},{1,-1},{0,1},{0,-1},{-1,1},{-1,-1},{-1,0}};void dfs(int x,int y){    int fx,fy;    for(int i=0;i<8;i++)    {        fx=x+dir[i][0];        fy=y+dir[i][1];        if(fx>=0&&fx<n&&fy>=0&&fy<m&&map[fx][fy]=='@')        {            map[fx][fy]='*';            dfs(fx,fy);        }    }}int main(){    int cnt=0;    //freopen("in.txt","r",stdin);    while(scanf("%d%d",&n,&m)!=EOF)    {        getchar();        if(n==0&&m==0)            break;        cnt=0;        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)            {                scanf("%c",&map[i][j]);            }            getchar();        }        for(int i=0;i<n;i++)            for(int j=0;j<m;j++)        {            if(map[i][j]=='@')            {                map[i][j]='*';                cnt++;                dfs(i,j);            }        }        printf("%d\n",cnt);    }    return 0;}


0 0