题解 P2960 【[USACO09OCT]Milkweed的入侵Invasion of the Milkweed】
首先这道题是一道经典的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】的更多相关文章
- 洛谷 P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed
P2960 [USACO09OCT]Milkweed的入侵Invasion of the Milkweed 题目描述 Farmer John has always done his best to k ...
- 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵
3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 8 ...
- [USACO09OCT]Invasion of the Milkweed】乳草的侵占-C++
Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份占领了一片立足之地. 草地像往常一样,被分割成一个高 ...
- BZOJ-USACO被虐记
bzoj上的usaco题目还是很好的(我被虐的很惨. 有必要总结整理一下. 1592: [Usaco2008 Feb]Making the Grade 路面修整 一开始没有想到离散化.然后离散化之后就 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 题解 P2955 【[USACO09OCT]奇数偶数Even? Odd? 】
很明显这题是个假入门! 小金羊一不小心点进题解发现了内幕 能看的出来都WA过Unsigned long long int 做题可以用Python,Python的变量虽然 强悍的不行! 但是我们可以用字 ...
- 洛谷P1339 [USACO09OCT]热浪Heat Wave 题解
题目传送门 这道题实际非常简单好奇是怎么变黄的... 其实也就是一个SPFA,本人非常懒,不想打邻接表,直接用矩阵就好啦... #include<bits/stdc++.h> using ...
- 洛谷 P2639 [USACO09OCT]Bessie的体重问题Bessie's We… 题解
题目传送门 这也是个01背包,只是装的很... #include<bits/stdc++.h> #define MAXN 45010 using namespace std; int f[ ...
- 题解 P1339 【[USACO09OCT]热浪Heat Wave】
题目链接 这道题纯属是一个裸的SPFA: 建议先把模板AC之后再做. 只需要做一些手脚,就是在加边的时候加一个双向边就好. 然后再第一次加点的时候 看不懂模板的出门左转度娘. 推荐下面一片讲解: 友链 ...
随机推荐
- linux中zookeeper
linux中zookeeper 安装jdk tar -zxvf jdk-11.0.1_linux-x64_bin.tar.gz -C /usr/src sudo vim /etc/profile 输入 ...
- springboot成神之——application.properties所有可用属性
application.properties所有可用属性 # =================================================================== # ...
- 关于苹果safari浏览器登陆时Cookie无法保存的问题
前段时间,修改了登录处理后给到客户端浏览器Cookie的内容,新增了一个姓名的value,发现safari不能保存该Cookie的内容,同时Chrome.firefox.ie等浏览器都能正常的访问,直 ...
- 判断Android系统net和wap接入点的开发实例
判断Android系统net和wap接入点的开发实例 分类标签: Activity 我们使用Android设备连接网络时,如果是wap接入点就需要设置代理,而电信和移动联通的代理并不相同,移动和联 ...
- linux系统上部署一个web项目
对于apache开源项目中tomcat的认识,大多停留在Windows下,这次我通过一个简单的实例来介绍一下在linux下如何搭建tomcat环境,并且部署一个web项目. 先从基本安装开始,可别小看 ...
- 固本培元之三:Convert、运算符、流程控制语句、ref/out/in三种参数类型
一.Convert类常用的类型转换方法Convert.ToInt32() 转换为整型(int)Convert.ToChar() 转换为字符型(char)Convert.ToString() 转换为字符 ...
- Process management of windows
igfxem.exe进程是正常的进程.是intel家的核显驱动类的进程.核显即"核芯显卡",是指GPU部分它是与CPU建立在同一内核芯片上,两者完全融合的芯片."核芯显卡 ...
- numpy ndarray 返回 index 问题
经常遇到需要返回满足条件的index. python中没有which函数,但有列表推导式, 可以实现类似功能 y= np.array([3,2,5,20]) yOut[131]: array([ 3, ...
- oracle数据库之数据插入、修改和删除
作为一合格的测试人员对数据库的单表查询.多表查询.分组查询.子查询等等这些基本查询方法还是要会的.不然到企业中,容易被一些人鄙视,或者说如果数据库学不好,表查不明白,那么对自己能力来说也是一种侮辱,因 ...
- 使用java实现单链表----(java中的引用就是指针)
//一直以为java中没有指针,其实java的引用就是指针,只不过堆栈中的引用储存了在堆中的地址,可以看做java中的指针.public class sibgleLink<E> { // ...