P1030 乳草的入侵
时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

USACO OCT09 6TH

描述

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

草地像往常一样,被分割成一个高度為Y(1 <= y <= 100), 宽度為X(1 <= x <= 100)的直角网格。(1,1)是左下角的格(也就是说坐标排布跟一般的X,Y坐标相同)。乳草一开始佔领了格(Mx,My)。每个星期,乳草传播到已被乳草佔领的格子四面八方的每一个没有很多石头的格(包括垂直与水平相邻的和对角线上相邻的格)。1周之后,这些新佔领的格又可以把乳草传播到更多的格裡面了。

Bessie想要在草地被乳草完全佔领之前尽可能的享用所有的牧草。她很好奇到底乳草要多久才能佔领整个草地。如果乳草在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星期后佔领整片土地。

输入格式

* 第一行: 四个由空格隔开的整数: X, Y, Mx, My

* 第2到第Y+1行: 数据的第y+1行由X个字符("."表示草地,"*"表示大石),描述草地的
第(Y+2-y)行。

输出格式

* 第一行: 一个单独的整数表示最后一个不是大石块的格子被乳草佔领的星期数。

测试样例1

输入

4 3 1 1 
.... 
..*. 
.**.

输出

4

 

宽搜(教程:http://rapheal.iteye.com/blog/1526861  感觉图配上蛮好理解的)
//这题坐标无比奇怪啊
给你一张图,

一开始要么是平地要么是石头
突然乳草进来啦
乳草每分钟会扩张到八联通的平地上(石头上不长)
求最快多少分钟整张地图除了石头就是乳草
保证数据合法
#include <iostream>
#include <stdio.h>
#define inf 233333333
using namespace std;
const int Maxn = ;
const int Maxq = ;
int n , m , x , y , ch;
int mp[Maxn][Maxn];//´æÒ»¸öµã×î¿ì±»²ÝÕ¼ÁìµÄʱ¼ä£¬-1±íʾÊÇʯͷ
int qx[Maxq] , qy[Maxq] , qt[Maxq];//´æ¶ÓÁÐ
int h , t;//¶ÓÁеĿªÊ¼/½áβ
bool vis[Maxn][Maxn];//ÓÉÓÚÊÇbfsËùÒÔµ½Ò»¸öµã¿Ï¶¨ÊÇ×î¶Ì·
const int ss[][] = { { , , - , , , , - , - } , { , , , - , , - , , - } };//°ËÁªÍ¨
int main() {
cin>>m>>n>>y>>x;
for(int i=; i<=n; ++i)
for(int j=; j<=m; ++j) {
while(ch = getchar() , ch != '.' && ch !='*');//while(¶ÁÈëÒ»¸ö×Ö·û , Èç¹ûÄǸö×Ö·û²»ÊÇ'.'»òÕß'*'¾ÍÒ»Ö±¶Á );
if(ch == '.')
mp[i][j] = inf;
else
mp[i][j] = -;
}
/*ÒÔÉÏΪ³õʼ»¯*/
qx[h = t = ] = n-x+;
qy[] = y;
qt[] = ;
while(h <= t) {
int nx = qx[h] , ny = qy[h] , nt = qt[h];
h++;
if(vis[nx][ny]) continue;//Èç¹û·ÃÎʹý¾Ícontinue
if(mp[nx][ny] == -) continue;//Èç¹ûÊÇʯͷ¾Ícontinue
vis[nx][ny] = ;//±ê¼ÇΪ×ß¹ý
mp[nx][ny] = nt;//¼Ç¼×ßµ½Õâ¸öµãµÄʱ¼ä
for(int i=; i<; ++i) {
int x = nx+ss[][i] , y = ny+ss[][i];
if(x <= || x > n || y <= || y > m) continue;//Èç¹û°ËÁªÍ¨ºÏ·¨¾Í¶ª½ø¶Ó
qx[++t] = x;
qy[t] = y;
qt[t] = nt + ;
}
}
/*ÒÔÉÏΪbfs*/
int ans = ;
for(int i=; i<=n; ++i) {
for(int j=; j<=m; ++j) {
//cout<<mp[i][j]<<"\t";
ans = max(ans , mp[i][j]);
}//puts("")
}
/*ÒÔÉÏΪͳ¼Æ´ð°¸*/
cout<<ans;
}

zls

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std;
int mx,my,n,m;
int ans=;
char a[][];
int f[][];
int head,tail=,qx[],qy[];
int xx[]={-,,,,-,,-,};
int yy[]={,,-,,-,,,-}; void bfs()
{
qx[]=mx,qy[]=my;
f[mx][my]=;
while(head!=tail)
{
int x=qx[head],y=qy[head];head++;
ans=f[x][y];
for(int i=;i<;i++)
{
int dx=x+xx[i],dy=y+yy[i];
if(dx<||dy<||dx>m||dy>n||a[dx][dy]=='*'||f[dx][dy]!=-)continue;
f[dx][dy]=f[x][y]+;
qx[tail]=dx;qy[tail]=dy;tail++;
}
} }
int main()
{
cin>>n>>m>>my>>mx;//m hang n lie
memset(f,-,sizeof(f));
for(int i=m;i>;i--)scanf("%s",a[i]+);
bfs();
cout<<ans;
puts(""); return ;
}

//不看清坐标毁一生

 
 

乳草的入侵//BFS的更多相关文章

  1. [TYVJ] P1030 乳草的入侵

    乳草的入侵 背景 Background USACO OCT09 6TH   描述 Description Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物 ...

  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. TYVJ P1030 乳草的入侵 Label:跳马问题

    背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份佔领了一 ...

  4. Tyvj 1030 乳草的入侵

    以一个简单的BFS对基础搜索做一个收尾好了. 给一个草,然后以这棵草为九宫格的中心,每周向周围八个方向扩散,问多少个星期能把这个农场占满. 遍历整个map,最后一个出队列的对应的星期数就是所求. // ...

  5. BZOJ 3406 乳草的入侵

    BFS. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...

  6. 乳草的侵占(BFS)

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

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

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

  8. BZOJ-USACO被虐记

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

  9. bzoj AC倒序

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

随机推荐

  1. PHP 函数extension_loaded();

    extension_loaded — 检查一个扩展是否已经加载 例如: <?php if (!extension_loaded('gd')) { if (!dl('gd.so')) { exit ...

  2. WPF 绑定三(绑定List中指定的字符串)

    xaml: <Window x:Class="WpfApplication1.Window3" xmlns="http://schemas.microsoft.co ...

  3. 5种IO模型

    Unix下可用的5种I/O模型分别是: 阻塞IO 非阻塞IO IO复用(select和poll) 信号驱动式IO(SIGIO) 异步IO(POSIX的aio系列函数)   阻塞式I/O模型:      ...

  4. 用MySQL log调试程序

    打开my.ini文件 在[mysqld]的下面加上log = c:/mysql_query.log.txt重启mysql 以后你用可以用editplus查看你运行的sql了,不用在程序里一句句的用lo ...

  5. 通过获取客户端Json数据字符串,反序列化为实体对象的一段代码

    #region 保存候选人数据 /// <summary> /// 保存候选人数据 /// </summary> /// <param name="entity ...

  6. MVC 删除文件

    protected void DeleteTempFiles(string iFileName) { FileInfo f = new FileInfo(iFileName); DirectoryIn ...

  7. iOS 进阶 第八天(0407)

    0407 UIPickerView.UIDatePicker和UIToolBar请参见视频和代码 pch文件 #ifdef __OBJC__ //在这里面写oc的引用,比如一些oc的头文件或者NSLo ...

  8. javascript中出现identifier starts immediately after numeric literal错误原因以及解决方法

    javascript遇到参数是字符型和数字型组合的参数就会出现这种错误,例如alert(1);可以正確輸出alert(str);就會報錯alert("str");可以正確輸出.

  9. 初涉Node.js

    Node.js的是建立在Chrome的JavaScript的运行时,可方便地构建快速,可扩展的网络应用程序的平台. Node.js使用事件驱动.非阻塞I/ O模型,是轻量级.高效.完美的跨分布式设备运 ...

  10. XML学习总结

    什么是XML?XML指可扩展标记语言(EXtendsible Markup Language) XML的设计宗旨是传输数据,而不是显示数据. XML标签没有被预定义(html是预定义),XML里面您需 ...