poj 1562 Oil Deposits (广搜,简单)

题目

简单的题目,只是测试案例的输入后面可能有空格,所以要注意一下输入方式。

#define  _CRT_SECURE_NO_WARNINGS
//题目的案例输入n,m后面有些貌似有空格。。。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 110
//bool vis[MAXN][MAXN];
char map[MAXN][MAXN];
int n,m,sum;
int xx[8]={0,0,1,1,1,-1,-1,-1};
int yy[8]={1,-1,0,1,-1,0,1,-1};
struct tt
{
    int x,y;
};

int bfs()
{
    int ans=0;
    tt front,rear,temp;
    queue<tt>q;
    while(!q.empty())
        q.pop();
//    memset(vis,false,sizeof(vis));
    for(int j=0;j<n;j++)
    {
        for(int k=0;k<m;k++)
        {
            if(map[j][k]=='@')
            {
                ans++;
                sum--;
                map[j][k]='*';
                if(sum==0)return ans;
                front.x=j,front.y=k;
                q.push(front);
                while(!q.empty())
                {
                    temp=q.front();
                    q.pop();
                    for(int i=0;i<8;i++)
                    {
                        rear.x=temp.x+xx[i];
                        rear.y=temp.y+yy[i];
                        if(rear.x>=0&&rear.x<n&&rear.y>=0&&rear.y<m&&map[rear.x][rear.y]=='@')
                        {
                            map[rear.x][rear.y]='*';
                            q.push(rear);
                            sum--;
                            if(sum==0)return ans;
                        }
                    }
                }
            }
        }
    }
    return ans;
}

int main()
{
    int i,j;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        if(n==0&&m==0)
            break;
        sum=0;
        for(i=0;i<n;i++)
        {
            scanf("%s",map[i]);//因为输入后貌似有时有空格,所以这么输入好了
            for(j=0;j<m;j++)
            {
                if(map[i][j]=='@')
                    sum++;
            }
            
        }
        printf("%d
",bfs());
    }
    return 0;
}
View Code
一道又一道,好高兴!
原文地址:https://www.cnblogs.com/laiba2004/p/3549066.html