zoukankan      html  css  js  c++  java
  • 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
    一道又一道,好高兴!
  • 相关阅读:
    Android开发学习笔记-SharedPreferences的用法
    Android开发学习笔记-自定义组合控件
    webpack 4 教程
    react 生命周期图解
    git 操作说明
    echars 3.0 去掉柱状图阴影用什么属性
    react——Table组件
    antd ——按钮
    react——Table组件列中靠左 靠右对齐解决方案
    react中异步的使用
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3549066.html
Copyright © 2011-2022 走看看