乳草的入侵//BFS
背景
描述
草地像往常一样,被分割成一个高度為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星期后佔领整片土地。
输入格式
* 第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的更多相关文章
- [TYVJ] P1030 乳草的入侵
乳草的入侵 背景 Background USACO OCT09 6TH 描述 Description Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物 ...
- 3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵
3406: [Usaco2009 Oct]Invasion of the Milkweed 乳草的入侵 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 8 ...
- TYVJ P1030 乳草的入侵 Label:跳马问题
背景 USACO OCT09 6TH 描述 Farmer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份佔领了一 ...
- Tyvj 1030 乳草的入侵
以一个简单的BFS对基础搜索做一个收尾好了. 给一个草,然后以这棵草为九宫格的中心,每周向周围八个方向扩散,问多少个星期能把这个农场占满. 遍历整个map,最后一个出队列的对应的星期数就是所求. // ...
- BZOJ 3406 乳草的入侵
BFS. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm&g ...
- 乳草的侵占(BFS)
armer John一直努力让他的草地充满鲜美多汁的而又健康的牧草.可惜天不从人愿,他在植物大战人类中败下阵来.邪恶的乳草已经在他的农场的西北部份占领了一片立足之地. 草地像往常一样,被分割成一个高度 ...
- [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 ...
随机推荐
- String 两种实例化方式的区别
package com.java1234.chap03.sec08; public class Demo3 { public static void main(String[] args) { //1 ...
- if语句代码优化
if($sum==7){ $sz+=135; }elseif($sum==5){ $sz+=80; }elseif($sum==6){ $sz+=97; }elseif($sum==4){ $sz+= ...
- winform 清空界面所有控件已输入的值
rivate void btnClear_Click(object sender, EventArgs e){ ClearCntrValue(this.pnlContent);} 复制代码/// ...
- (一)在linux上ubuntu搭建hustOJ系统
同实验室有人在用java写签到系统,正好我在学习PHP,我就在想能不能在以前学长留下来一直没用OJ上添加一个签到功能. 于是说干就干,就找了许多关于hustoj的文章参考. 首先要说的是安装husto ...
- Dataguard之redo传输服务
一.Data Guard架构 整个Data Guard体系就是围绕三个关键点展开: 日志发送(Redo Send) 日志接收(Redo Receive) 日志应用(Redo Apply) 二.日志发送 ...
- 忘记linux root密码怎么办?
摘自:<鸟哥的Linux私房菜> 常常有些朋友在配置好了Linux之后,结果root密码给他忘记去!要重新安装吗?不需要的, 你只要以单人维护模式登陆即可更改你的root密码喔!由于lil ...
- Microsoft Press Free eBook
微软的免费的电子书, 都是Microsoft Press 出版的 有以下价格方面 Windows Server(大体上都是Windows Server 2012 ) Microsoft Azure(好 ...
- Arrays.asList方法总结
import java.util.Arrays; import java.util.List; /** * * 本类演示了Arrays类中的asList方法 * 通过四个段落来演示,体现出了该方法的相 ...
- List<T>中Exists 和Contains的区别
.net编码中,使用泛型List<>时,经常遇到这样的需求:新来一个Model对象,如果已有的List中没有这条数据,则把新对象Add到List中,否则不处理 判断已有的List中是否包含 ...
- JAVA SSH 框架介绍
SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架. Struts Struts是一个基于Sun J2EE平台的MVC框架, ...