题目链接

首先这道题是一道经典的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. Python类(二)-类的继承

    单继承 #-*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" class People: def __init__(self,name ...

  2. CDM中,创建一个或多个组合属性的唯一约束

    除主键外,有时还需要创建一个或多个组合字段的唯一约束,方法如下: 双击打开实体,在idntifier标签页中可看到默认主键的唯一约束,在其下方添加一条记录,然后双击该记录,打开约束设置窗口 在该窗口的 ...

  3. 【树莓派】开机自启动脚本方法之一(.Desktop文件)

    转载处: 又一个让树莓派开机运行Python脚本的方法 Linux 创建启动器(.Desktop文件) 首先,树莓派使用的是官方推荐的镜像:RASPBIAN: 在树莓派上常常会需要开机自启动pytho ...

  4. 谈谈contentWindow 和contentDocument以及 iframe

    1,contentWindow:是用来获取子窗口的window对象的,它兼容各大浏览器,用法如下 document.getElementById("iframeId").conte ...

  5. requirejs——define——普通模块

    一.普通模块可能包含的内容: 一个模块对应着一个js文件,由于模块可能包含着以下三种内容:模块名.依赖模块.返回给其他模块使用的参数:因此js文件根据包含内容的不同而写法不同. 一.传统的js脚本文件 ...

  6. 「小程序JAVA实战」 小程序默认加载的页面和生命周期(八)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-08/ 小程序如何加载的呢?生命周期!源码:https://github.com/limingios ...

  7. CSS中盒子垂直居中的常用方法

    在前端开发过程中,盒子居中是常常用到的.其中 ,居中又可以分为水平居中和垂直居中.水平居中是比较容易的,直接设置元素的margin: 0 auto就可以实现.但是垂直居中相对来说是比较复杂一些的.下面 ...

  8. 敏捷软件开发Note

    [敏捷原则] 1.我们最优先要做的是通过尽早的.持续的交付有价值的软件为使客户满意. 初期交付的系统中所包含的功能越少,最终交付的系统的质量就越高.交付的越频繁,最终的产品质量就越高.敏捷实践会说早地 ...

  9. codeforce452DIV2——F. Letters Removing

    题意:给一个字符串和m个操作,每次给出l,r,c,把字符串中l-r这段区间的字符为c的字符删掉,求最后的字符串.(n,m<=2e5)线段树.注意这个区间修改和普通区间修改的区别. 他们都是用树状 ...

  10. sudo apt install libreadline-dev Reading package lists... Error!

    luo@luo-ThinkPad-W540:~$ luo@luo-ThinkPad-W540:~$ luo@luo-ThinkPad-W540:~$ luo@luo-ThinkPad-W540:~$ ...