[USACO09OCT]Invasion of the Milkweed】乳草的侵占-C++
Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草。可惜天不从人愿,他在植物大战人类中败下阵来。邪恶的乳草已经在他的农场的西北部份占领了一片立足之地。
草地像往常一样,被分割成一个高度为Y(1 <= Y <= 100), 宽度为X(1 <= X <= 100)的直角网格。(1,1)是左下角的格(也就是说坐标排布跟一般的X,Y坐标相同)。乳草一开始占领了格(Mx,My)。每个星期,乳草传播到已被乳草占领的格子四面八方的每一个没有很多石头的格(包括垂直与水平相邻的和对角在线相邻的格)。1周之后,这些新占领的格又可以把乳草传播到更多的格里面了。
Bessie想要在草地被乳草完全占领之前尽可能的享用所有的牧草。她很好奇到底乳草要多久才能占领整个草地。如果乳草在0时刻处于格(Mx,My),那么会在哪个时刻它们可以完全占领入侵整片草地呢?对给定的数据总是会发生。
输入输出格式
输入格式:
* Line 1: Four space-separated integers: X, Y, Mx, and My
* Lines 2..Y+1: Line y+1 describes row (Y+2-y) of the field with X characters ('.' for grass and '*' for a boulder)
输出格式:
* Line 1: A single integer that is the week number when the milkweed takes over the last remaining non-boulder square of the pasture.
输入样例#1:
4 3 1 1
....
..*.
.**.
输出样例#1:
4
这道题用bfs
初学bfs这道题想了一上午
题目主要坑点就是坐标,"(1,1)是左下角的格(也就是说坐标排布跟一般的X,Y坐标相同)" ,所以我们只要能把给出的坐标转化成正常数组的下标就可以正常搜索了。
所以bfs的主要思路就是:
将一个含有坐标及当前的周数的结构体读入到队列里面,然后正常搜索。不过值得注意的是每次坐标的移动量我们可以用一个数组dir[8][2]来打表表示出来,然后每次调用的时候判断当前位置是否可以长草以及是否越界。最后输出就可以了。
AC代码
#include<bits/stdc++.h>
using namespace std;
int X,Y,mx,my;
string g[1000+5];
int dir[8][2]={{1,0},{1,-1},{1,1},{-1,0},{-1,1},{-1,-1},{0,1},{0,-1}};
struct node
{
int y,x,t;
node(){};
node(int _y,int _x,int _t)
{
y=_y;
x=_x;
t=_t;
}
};
queue<node> qu;
bool in(int y,int x)
{
return 0<=y&&y<Y&&0<=x&&x<X;
}
int bfs(int y,int x)
{
qu.push(node(y,x,0));
g[y][x]='M';
int re=0;
while(!qu.empty())
{
node now=qu.front();
qu.pop();
re=now.t;
for(int i=0;i<8;i++)
{
int ty=now.y+dir[i][0];
int tx=now.x+dir[i][1];
if(in(ty,tx)&&g[ty][tx]=='.')
{
g[ty][tx]='M';
qu.push(node(ty,tx,now.t+1));
}
}
}
return re;
}
int main()
{
cin>>X>>Y>>mx>>my;
for(int i=Y-1;i>=0;i--)
cin>>g[i];
cout<<bfs(my-1,mx-1)<<endl;
return 0;
}
ov.
[USACO09OCT]Invasion of the Milkweed】乳草的侵占-C++的更多相关文章
- 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵
3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 8 ...
- 乳草的侵占(BFS)
armer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份占领了一片立足之地. 草地像往常一样,被分割成一个高度 ...
- 洛谷 P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed
P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed 题目描述 Farmer John has always done his best to k ...
- TYVJ P1030 乳草的入侵 Label:跳马问题
背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份佔领了一 ...
- 乳草的入侵//BFS
P1030 乳草的入侵 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美 ...
- [TYVJ] P1030 乳草的入侵
乳草的入侵 背景 Background USACO OCT09 6TH 描述 Description Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物 ...
- 题解 P2960 【[USACO09OCT]Milkweed的入侵Invasion of the Milkweed】
题目链接 首先这道题是一道经典的BFS.非常适合刚刚学习深搜的同学. 现在分析一下这个问题.首先,每周是八个方向.就是一圈. 也就是说入侵的范围关于时间是成辐射型扩散.让求最大时间. 也就是完美的BF ...
- Tyvj 1030 乳草的入侵
以一个简单的BFS对基础搜索做一个收尾好了. 给一个草,然后以这棵草为九宫格的中心,每周向周围八个方向扩散,问多少个星期能把这个农场占满. 遍历整个map,最后一个出队列的对应的星期数就是所求. // ...
- BZOJ 3406 乳草的入侵
BFS. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...
随机推荐
- fastjson 出现首字母小写的问题
今天工作使用fastjson要求传过去的参数全为大写,在使用的过程中发现它自动将我的字段首字母转为小写了,在网上查了一些资料,发现下面的这个挺好,比其他的要方便. package com.alibab ...
- DelphiRemotePushSender
Sending iOS (and Android) remote push notifications from your Delphi service with the HTTP/2 protoco ...
- 基于ASP.NET的新闻管理系统(二)效果展示
5. 新闻管理系统开发与实现 5.1前台新闻页面 主页面 新闻栏展示新闻 搜索新闻 菜单栏链接新闻 后台登录界面 大管理员后台管理界面 小管理员后台管理界面 修改密码 增加新闻界面 栏目管理界面 ...
- Python魔法方法__getattr__和__getattribute__详解
在Python中有这两个魔法方法容易让人混淆:__getattr__和getattribute.通常我们会定义__getattr__而从来不会定义getattribute,下面我们来看看这两个的区别. ...
- String的所有方法以及解释
capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串 c ...
- 高中生也能读懂的Docker入门教程
Docker 是 Golang 编写的, 自 2013 年推出以来,受到越来越多的开发者的关注.如果你关注最新的技术发展,那么你一定听说过 Docker.不管是云服务还是微服务(Microservic ...
- Redis 学习笔记(篇三):跳表
跳表 跳表(skiplist)是一种有序的数据结构,是在有序链表的基础上发展起来的. 在 Redis 中跳表是有序集合(sort set)的底层实现之一. 说到 Redis 中的有序集合,是不是和 J ...
- 《菜鸟也要学会C》-和大家聊一聊
简介 为什么要出本系列作品? 怎么学好C? 学完这套课程后,我的编程会怎么样? 1.1为什么要出本系列作品? 随着大部分人喜欢编程,大部分人都有一个毛病,就是想要急切的学完编程.其实这种思想是错误的, ...
- MCtalk对话学吧课堂:真正的K12在线教育才刚刚开始
课堂之外的在线教育已经被大部分家庭所熟知,既涌现出了VIPKID等行业独角兽,也有大量致力于科技改变教育的新兴机构获得了快速成长.成立于2014年的学吧课堂就是专注在K12在线教育领域的创新机构,他们 ...
- Azkaban学习之路(一)—— Azkaban 简介
一.Azkaban 介绍 1.1 背景 一个完整的大数据分析系统,必然由很多任务单元(如数据收集.数据清洗.数据存储.数据分析等)组成,所有的任务单元及其之间的依赖关系组成了复杂的工作流.复杂的工作流 ...