HDU--1241 简单DFS

来源:互联网 发布:mimo软件 编辑:程序博客网 时间:2024/05/16 18:28

题目链接:点击打开链接

遍历整个图,把‘@’变成‘*’,统计次数

AC代码:

#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<algorithm>using namespace std;typedef long long ll;const int N=1000;struct Node{    int x;    int y;};int n,m;#define MM(x,y) memset(x,y,sizeof(x))queue<Node>Q;int vis[N][N];char mp[N][N];int dir[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};void dfs(int x,int y){    int i;    Node now,next;    now.x=x;    now.y=y;    MM(vis,0);    vis[x][y]=1;    Q.push(now);    while(!Q.empty())    {        now=Q.front();        Q.pop();        for(i=0;i<8;i++)        {            int tx=now.x+dir[i][0];            int ty=now.y+dir[i][1];            if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&!vis[tx][ty]&&mp[tx][ty]=='@')            {                next.x=tx;                next.y=ty;                vis[tx][ty]=1;                mp[tx][ty]='*';                Q.push(next);            }        }    }}int main(){    int i,j;    while(cin>>n>>m&&n&&m)    {        MM(mp,0);        int res=0;        for(i=1;i<=n;i++)        {            cin>>mp[i]+1;        }        for(i=1;i<=n;i++)        {            for(j=1;j<=m;j++)            {                if(mp[i][j]=='@')                {                    mp[i][j]='*';                    while(!Q.empty())                    {                        Q.pop();                    }                    dfs(i,j);                    res++;                }            }        }        cout<<res<<endl;    }    return 0;}


原创粉丝点击