ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

acwing 189. 乳草的入侵 bfs

2020-06-24 22:53:30  阅读:335  来源: 互联网

标签:int 草地 .... newx bfs 乳草 newy 189


地址 https://www.acwing.com/solution/content/15240/

农民约翰一直努力让他的草地充满鲜美多汁而又健康的牧草。

可惜天不从人愿,他在植物大战人类中败下阵来。

邪恶的乳草已经在他的农场的西北部份占领了一片立足之地。

草地像往常一样,被分割成一个高度为Y, 宽度为X的直角网格。

(1,1)是左下角的格(也就是说坐标排布跟一般的X,Y坐标相同)。

乳草一开始占领了格(Mx,My)。

每个星期,乳草传播到已被乳草占领的格子四面八方的每一个没有很多石头的格(

包括垂直与水平相邻的和对角线上相邻的格)内。

1周之后,这些新占领的格又可以把乳草传播到更多的格里面了。

达达想要在草地被乳草完全占领之前尽可能的享用所有的牧草。

她很好奇到底乳草要多久才能占领整个草地。

如果乳草在0时刻处于格(Mx,My),

那么几个星期以后它们可以完全占领入侵整片草地呢(对给定的数据总是会发生)?

在草地地图中,”.”表示草,而”*”表示大石。

比如这个X=4, Y=3的例子。

....
..*.
.**.
如果乳草一开始在左下角(第1排,第1列),那么草地的地图将会以如下态势发展:

      ....  ....  MMM.  MMMM  MMMM  
      ..*.  MM*.  MM*.  MM*M  MM*M  
      M**.  M**.  M**.  M**.  M**M  
星期数  0     1     2     3     4
乳草会在4星期后占领整片土地。

输入格式
第1行: 四个由空格隔开的整数: X, Y, Mx, My
第2到第Y+1行: 每行包含一个由X个字符(”.”表示草地,”*”表示大石)构成的字符串,共同描绘了草地的完整地图。

输出格式
输出一个整数,表示乳草完全占领草地所需要的星期数。

数据范围
1≤X,Y≤100
输入样例:
4 3 1 1
....
..*.
.**.
输出样例:
4

算法1
读入有毒 XY要转换下
其他没什么了

BFS 以队列Q为空作为退出时机,其实不太需要进行计数cnt 。
标记是否访问数组 其实可以检查数组元素是 . M * 就可以了

// 123124.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <queue>


using namespace std;

/*
输入样例:
4 3 1 1
....
..*.
.**.
输出样例:
4
*/
const int N = 110;
int n, m, inx, iny;
char g[N][N];
int dir[8][2] = {
    {-1,-1},{-1,0},{-1,1},
    {0,-1},{0,1},
    {1,-1},{1,0},{1,1}
};


int main()
{
    cin >> n >> m >> inx >> iny;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> g[i][j];
        }
    }
    //x y 调转
    int startx = m-iny;
    int starty = inx -1;
    int ans = 0;

    queue<vector<int>> Q;
    Q.push({ startx ,starty,0 });
    g[startx][starty] = 'M';

    while (Q.size()) {
        int x = Q.front()[0];
        int y = Q.front()[1];
        int day = Q.front()[2];
        ans = day;
        Q.pop();

        for (int i = 0; i < 8; i++) {
            int newx = x + dir[i][0];
            int newy = y + dir[i][1];

            if (newx >= 0 && newx < m && newy >= 0 && newy < n && g[newx][newy] == '.') {
                g[newx][newy] = 'M';
                Q.push({ newx ,newy,day+1});
            }
        }
    }


    cout << ans << endl;


    return 0;
}

 

标签:int,草地,....,newx,bfs,乳草,newy,189
来源: https://www.cnblogs.com/itdef/p/13190495.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有