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的更多相关文章
- Luogu P2864 [USACO06JAN]树林The Grove(bfs)
P2864 [USACO06JAN]树林The Grove(bfs) 题面 题目描述 The pasture contains a small, contiguous grove of trees t ...
- [USACO06JAN]树林The Grove
树木(grove)Time Limit: 1Sec Memory Limit: 64 MB[Description]牧场里有一片树林,林子里没有坑.贝茜很想知道,最少需要多少步能围绕树林走一圈,最后回 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- bzoj:1656 [Usaco2006 Jan] The Grove 树木
Description The pasture contains a small, contiguous grove of trees that has no 'holes' in the middl ...
- 【Noip模拟 20160929】树林
题目描述 现在有一片树林,小B很想知道,最少需要多少步能围绕树林走一圈,最后回到起点.他能上下左右走,也能走对角线格子. 土地被分成RR行CC列1≤R≤50,1≤C≤501≤R≤50,1≤C≤50,下 ...
- 【BZOJ】1656:[Usaco2006 Jan]The Grove 树木(bfs+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1656 神bfs! 我们知道,我们要绕这个联通的树林一圈. 那么,我们想,怎么才能让我们的bfs绕一个 ...
- POJ3182 The Grove[射线法+分层图最短路]
The Grove Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 904 Accepted: 444 Descripti ...
- poj 3182 The Grove
The Grove Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 641 Accepted: 297 Descripti ...
- Luogu2860 [USACO06JAN]冗余路径Redundant Paths
Luogu2860 [USACO06JAN]冗余路径Redundant Paths 给定一个连通无向图,求至少加多少条边才能使得原图变为边双连通分量 \(1\leq n\leq5000,\ n-1\l ...
随机推荐
- uva 10983 Buy one, get the rest free 二分判定层次图
二分枚举租用飞机的最大花费,然后用小于等于最大花费的边构建层次图(依据时间) 构图思路: 利用二元组(x,y)表示 x天y城市 1. e天有飞机从a城市飞到b城市,能够承载x人,则添加单向边 ( ...
- HOJ-2056 Bookshelf(线性动态规划)
L is a rather sluttish guy. He almost never clean up his surroundings or regulate his personal goods ...
- Java Eclipse编译后产生的字节码文件,用DOS命令符怎么打开
在很多初学者刚刚接触eclipse的时候,写完一个代码文件.例如 Demo.java 通过run as a java application生成之后,会产生一个Demo.class. Demo.cla ...
- python中的字符串切片
python中的字符串切片,似乎有点乱,例如: >>>pystr='Python' >>>pystr[2:5] 就会输出 'tho' 这该怎样理解呢?中括号[2:5 ...
- ionic项目打包好Xcode工程,模拟器运行各种沙盒缓存目录
用ionic开发好的app,build好iOS端可用的Xcode工程,然后用模拟器跑起来.研究一下js写的代码做本地持久化时,不同类型的文件都放在那里了. cordova-plugin-sqliteS ...
- idea启动tomcat后访问项目报java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
一.报错“java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet” 1.File --- ...
- JS中生成和解析JSON
1.JS中生成JSON对象的方法: var json = []; var row1 = {}; row1.id= "1"; row1.name = "jyy"; ...
- maven配置(myeclipse版)
使用环境说明: OS:windows 7 64位 java version: "jdk1.8.0_66" IDE:myeclipse 2017 1.下载 下载地址:http://m ...
- 一个JS Class的“增删改查”
function AA (){ var r={}; this.get = function(key){ return r[key]; } this.put = function(key,x){ r[k ...
- BZOJ4614 UVA1742 Oil 计算几何+搜索+扫描线
正解:计算几何+搜索+扫描线 解题报告: 传送门 哇我是真的觉得这题很妙了!各个方面都很妙啊... 首先有一个很重要的结论:最优线一定可以通过各种变换(旋转/平移)使得经过一条线段的左端点(...并不 ...