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
    一道又一道,好高兴!
  • 相关阅读:
    java 数组声明方法
    python 什么叫迭代
    Golang生成区间随机整数
    Golang字符串格式化
    Golang中map的三种声明方式和简单实现增删改查
    Golang实现二分查找法
    Golang实现冒泡排序法
    Golang切片的三种简单使用方式及区别
    Golang获取int数组里的最大值和下标
    Golang数组注意细节
  • 原文地址:https://www.cnblogs.com/laiba2004/p/3549066.html
Copyright © 2011-2022 走看看