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. 用户不在sudoers文件中的解决方法

    1.更改/etc/sudoers权限为777 2.修改文件中 root    ALL=(ALL)       ALL 下方增加 user    ALL=(ALL)       ALL 3.回复文件/e ...

  2. windows程序消息机制(Winform界面更新有关)

    windows程序消息机制(Winform界面更新有关) 转自:http://www.cnblogs.com/blosaa/archive/2013/05/31/3109586.html 1. Win ...

  3. centos中安装chromium和flash

    安装环境:centos 6.5 64位 在centos中安装chromium 安装Google源 cd /etc/yum.repos.d/ sudo wget http://people.CentOS ...

  4. 分享:perl 文件操作总结

    发布:thebaby 来源:net [大 中 小] perl 文件操作,包括打开.关闭文件,读取.定入文件等.原文链接:http://www.jbxue.com/article/3153.html 打 ...

  5. delphi图形图像开发相关

    ①delphi的图形处理(doc) http://wenku.baidu.com/view/519df09951e79b89680226ee.html ②delphi的图形图像处理(ppt) http ...

  6. 从new Function创建函数联想到MVC模式

    我们知道任何一个自定义函数都是Function构造器的实例,所以我们可以通过new Function的方式来创建函数,使用语法很简单, new Function(形参1, 形参2, ..., 形参N, ...

  7. [转]WPF 依赖项属性

    from:http://blog.csdn.net/datoumimi/article/details/8033682 ps:环境限制,发的东西一长就会被拦截,所以删了一部分 UI软件中经常会用到大量 ...

  8. 括弧匹配检验(check)

    /*题目:括弧匹配检验 检验给定表达式中括弧是否正确匹配 (两种括弧“( ) ”“[]" ,正确输出OK,错误则输出wrong. 2016年8月8日07:24:58 作者:冰樱梦 */ # ...

  9. 从零开始学ios开发(十七):Storyboards(上)

    在开始这章之前,先做个说明,从这篇开始,我所使用的xcode更新成了最新的版本,版本是4.6.1(4H512),如下: 大家可以打开自己电脑上的App Store,然后搜索xcode,第一个出现的就是 ...

  10. php必看六本书

    php和mysql web开发 PHP高级程序设计_模式.框架与测试.pdf  PHP专业项目实例开发.pdf PHP5高级应用开发实践.pdf [深入PHP面向对象.模式与实践(第2版)].(美)赞 ...