P2864 [USACO06JAN]树林The Grove

神奇的射线法+bfs

裸的bfs很难写.......

那么我们找一个最外围障碍点,向图的外边引一条虚拟射线。

蓝后bfs时经过这条射线奇数次最后又回到起点的,就是满足条件的路径

最后来个bfs+记忆化

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 55
const int d1[]={-,,,,-,-,,};
const int d2[]={,,-,,-,,-,};
struct data{
int x,y,k;//k:穿过次数
data(){}
data(int A,int B,int C):
x(A),y(B),k(C){}
}; queue <data> h;
int n,m,gx,gy,tx,ty,d[N][N][];
char q[N]; bool a[N][N];
bool across(data f,data t){
if(gx==f.x&&gy>f.y&&gx>t.x) return ;//自下而上穿过
if(gx==t.x&&gy>t.y&&gx>f.x) return ;//自上而下穿过
return ;
}
int main(){
memset(d,,sizeof(d));
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i){
scanf("%s",q+);
for(int j=;j<=m;++j){
if(q[j]=='X'){
a[i][j]=;
if(!gx) gx=i,gy=j;//找一个障碍点,最好是外围的
}else if(q[j]=='*'){
d[tx=i][ty=j][]=;
h.push(data(i,j,));
}
}
}
while(!h.empty()){
data u=h.front(),p; h.pop();
for(int i=;i<;++i){
p=data(u.x+d1[i],u.y+d2[i],u.k);
if(p.x<||p.x>n||p.y<||p.y>m)
continue;
if(a[p.x][p.y]) continue;
if(across(u,p)) p.k^=;
if(d[p.x][p.y][p.k]<=d[u.x][u.y][u.k]+)
continue;
d[p.x][p.y][p.k]=d[u.x][u.y][u.k]+;
h.push(p);
}
}printf("%d",d[tx][ty][]);//穿过奇数次回到起点的
return ;
}

P2864 [USACO06JAN]树林The Grove的更多相关文章

  1. Luogu P2864 [USACO06JAN]树林The Grove(bfs)

    P2864 [USACO06JAN]树林The Grove(bfs) 题面 题目描述 The pasture contains a small, contiguous grove of trees t ...

  2. [USACO06JAN]树林The Grove

    树木(grove)Time Limit: 1Sec Memory Limit: 64 MB[Description]牧场里有一片树林,林子里没有坑.贝茜很想知道,最少需要多少步能围绕树林走一圈,最后回 ...

  3. 【BZOJ-1656】The Grove 树木 BFS + 射线法

    1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 186  Solved: 118[Su ...

  4. bzoj:1656 [Usaco2006 Jan] The Grove 树木

    Description The pasture contains a small, contiguous grove of trees that has no 'holes' in the middl ...

  5. 【Noip模拟 20160929】树林

    题目描述 现在有一片树林,小B很想知道,最少需要多少步能围绕树林走一圈,最后回到起点.他能上下左右走,也能走对角线格子. 土地被分成RR行CC列1≤R≤50,1≤C≤501≤R≤50,1≤C≤50,下 ...

  6. 【BZOJ】1656:[Usaco2006 Jan]The Grove 树木(bfs+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1656 神bfs! 我们知道,我们要绕这个联通的树林一圈. 那么,我们想,怎么才能让我们的bfs绕一个 ...

  7. POJ3182 The Grove[射线法+分层图最短路]

    The Grove Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 904   Accepted: 444 Descripti ...

  8. poj 3182 The Grove

    The Grove Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 641   Accepted: 297 Descripti ...

  9. Luogu2860 [USACO06JAN]冗余路径Redundant Paths

    Luogu2860 [USACO06JAN]冗余路径Redundant Paths 给定一个连通无向图,求至少加多少条边才能使得原图变为边双连通分量 \(1\leq n\leq5000,\ n-1\l ...

随机推荐

  1. 微信小程序中target与currentTarget

    target在事件流的目标阶段:currentTarget在事件流的捕获,目标及冒泡阶段.但事件流处于目标阶段,target与currentTarget指向一样, 而当处于捕获和冒泡阶段的时候,tar ...

  2. SQL Fundamentals: Basic SELECT statement基本的select语句(控制操作的现实列)(FROM-SELECT)

    SQL Fundamentals || Oracle SQL语言 Capabilities of the SELECT Statement(SELECT语句的功能) Data retrieval fr ...

  3. Django-MySQL数据库使用01

    Django连接数据库的要求:1)Pycharm运行Django平台:2)MySQL数据库.本文的前提是这两个平台读者都已经都正确安装,未安装的朋友请自行百度.说明一下我用的Django是2.1版本, ...

  4. linux:帮助命令help、man、info

    笔记内容如下: 1.内建命令与外部命令之分2.help , man , info命令的使用以及区别 内建命令与外部命令 有一些查看帮助的工具在内建命令与外建命令上是有区别对待的. 内建命令实际上是 s ...

  5. The third column indicates whether subclasses of the class declared outside this package have access to the member.;

    总结1.modifier 改性剂 修饰符 修饰语 调节器access modifier 访问修饰符 存取权限 存取修饰词 存取修饰字官网“can”Access level modifiers dete ...

  6. flask的session用法

    转自:https://www.cnblogs.com/52forjie/p/8282453.html 简介 flask-session是flask框架的session组件,由于原来flask内置ses ...

  7. 2018/04/16 PHP 设计模式之工厂模式

    学习设计模式一定要知道它是为了什么而产生的,凡事一定有原因. 站在巨人的肩膀上学习,推荐两篇文章 什么是php工厂模式?为何要用php工厂模式? php工厂模式的使用实例总结 PHP设计模式之工厂模式 ...

  8. ubuntu16.4中安装samba服务

    一.下载samba软件包,不用安装其他的了,因为它会自动帮我们下载所需要的其他依赖包 sudo apt-get install samba 二.修改/etc/samba目录下的配置文件,smb.con ...

  9. xls的读写

    import xlrd # 读取xls文件 # 打开xls文件 data = xlrd.open_workbook('x1.xls') print(type(data)) # 获取表Sheet1 ta ...

  10. java8,方法引用

    1:方法引用,https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html 当我们使用lambda表达式去创建一个 ...