题目链接

首先这道题是一道经典的BFS。非常适合刚刚学习深搜的同学。

现在分析一下这个问题。首先,每周是八个方向。就是一圈。

也就是说入侵的范围关于时间是成辐射型扩散。让求最大时间。

也就是完美的BFS。算出来之后,维护一个最大用时就好。

不过说一句。这个数区范围对于一个不会stl的人来说可以直接手写队列。

好了上代码:

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;//头文件不说
int dx[]={,,,-,,,-,-};
int dy[]={,,-,,,-,,-};//定义八个方向
int dis[][];//储存所需要的时间
int n,m;int ans;//ans是需要维护的最大值。
int head=;int tail=;//定义队列。注意队头队尾是1!;
bool book[][];//图
int q[][];//手写队列,第二维一个是横坐标,一个是纵坐标
int mx;int my;//初始位置
int main()
{
scanf("%d%d%d%d",&n,&m,&mx,&my);//输入并且处理
for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
char now;
cin>>now;
if(now=='.') book[i][j]=true;
else book[i][j]=false;
}
}//注意我的建图顺序
/* for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",book[i][j]);
}
printf("\n");
}
*///测试点
q[][]=m-my+;//把起始点压进队列
q[][]=mx;
dis[my][m-my+]=;//初始化
while(head<=tail)//判断是否为空队列
{
int now_x=q[head][];
int now_y=q[head][];
int tx,ty;
head++;//取出队头横纵坐标
for(int i=;i<;i++)//八个方向
{
tx=now_x+dx[i];ty=now_y+dy[i];
if(book[tx][ty]==true&&!dis[tx][ty])
/*
这里有个小优化。就是判断能不能走之后。如果搜过了(dis[tx][ty]!=0)就可以不搜了。因为一定会重,直接跳过。
*/
{
dis[tx][ty]=dis[now_x][now_y]+;
q[++tail][]=tx;
q[tail][]=ty;//判断,更新,入队
}
}
}
/* for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
printf("%d ",dis[i][j]);
}
printf("\n");
}*///测试数据 for(int i=;i<=m;i++)
{
for(int j=;j<=n;j++)
{
ans=max(ans,dis[i][j]);
}
}//找最大值
printf("%d",ans);//输出
return ;//程序拜拜
}

实际上我最后67行开始可以有一个优化。就是在更新的时候就连ans一起维护了。就像这样

//54行开始
if(book[tx][ty]==true&&!dis[tx][ty])
{
dis[tx][ty]=dis[now_x][now_y]+;
ans=max(ans,dis[tx][ty]);
q[++tail][]=tx;
q[tail][]=ty;
}
}
}
printf("%d",ans);
return ;

题解 P2960 【[USACO09OCT]Milkweed的入侵Invasion of the Milkweed】的更多相关文章

  1. 洛谷 P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed

    P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed 题目描述 Farmer John has always done his best to k ...

  2. 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵

    3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 8 ...

  3. [USACO09OCT]Invasion of the Milkweed】乳草的侵占-C++

    Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份占领了一片立足之地. 草地像往常一样,被分割成一个高 ...

  4. BZOJ-USACO被虐记

    bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. 题解 P2955 【[USACO09OCT]奇数偶数Even? Odd? 】

    很明显这题是个假入门! 小金羊一不小心点进题解发现了内幕 能看的出来都WA过Unsigned long long int 做题可以用Python,Python的变量虽然 强悍的不行! 但是我们可以用字 ...

  7. 洛谷P1339 [USACO09OCT]热浪Heat Wave 题解

    题目传送门 这道题实际非常简单好奇是怎么变黄的... 其实也就是一个SPFA,本人非常懒,不想打邻接表,直接用矩阵就好啦... #include<bits/stdc++.h> using ...

  8. 洛谷 P2639 [USACO09OCT]Bessie的体重问题Bessie's We… 题解

    题目传送门 这也是个01背包,只是装的很... #include<bits/stdc++.h> #define MAXN 45010 using namespace std; int f[ ...

  9. 题解 P1339 【[USACO09OCT]热浪Heat Wave】

    题目链接 这道题纯属是一个裸的SPFA: 建议先把模板AC之后再做. 只需要做一些手脚,就是在加边的时候加一个双向边就好. 然后再第一次加点的时候 看不懂模板的出门左转度娘. 推荐下面一片讲解: 友链 ...

随机推荐

  1. 大杀器TheFatRat

    项目地址:https://github.com/Screetsec/TheFatRat 安装TheFatRat root@sch01ar:/sch01ar# git clone https://git ...

  2. Git第三方仓库安装方式(IUS)

    1.安装使用里面说的自动化安装脚本 curl https://setup.ius.io | sh 2.然后可以看到 git2u相关内容 yum search git 3.执行安装,并查看下版本 yum ...

  3. HTTP及XMLHTTP状态代码一览

    (一) HTTP 1.1支持的状态代码 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 Switching Protocols 服务器将遵从客户的请求转换到另外一 ...

  4. Tornado 高并发源码分析之六---异步编程的几种实现方式

    方式一:通过线程池或者进程池 导入库futures是python3自带的库,如果是python2,需要pip安装future这个库 备注:进程池和线程池写法相同 from concurrent.fut ...

  5. C++虚函数与纯虚函数用法与区别(转载)

    1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class) ...

  6. Bootstrap 概览

    目录1.移动设备2.响应式图片3.Normalize4.Containers 1.移动设备在Bootstrap 3中,我们重写了整个框架,使其一开始就是对移动设备友好的.这次不是简单的增加一些可选的针 ...

  7. Spring总结一:Srping快速入门

    Sping是什么: Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.Spring是于2003 年兴起的一个轻量级的J ...

  8. 【bzoj3670】[Noi2014]动物园

    3670: [Noi2014]动物园 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2080  Solved: 1107[Submit][Status ...

  9. Jquery异步

    一.Jquery向aspx页面请求数据$("#Button1").bind("click", function () { $.ajax({ type: &quo ...

  10. 在Sqlserver中使用Try Catch

      创建错误日志表: CREATE TABLE ErrorLog(errNum INT,ErrSev NVARCHAR(1000),ErrState INT,ErrProc NVARCHAR(1000 ...