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. SQL Fundamentals || Single-Row Functions || 数字函数number functions

    SQL Fundamentals || Oracle SQL语言 SQL Fundamentals: Using Single-Row Functions to Customize Output使用单 ...

  2. ls 列出文件目录(可以含子目录)及文件的完整路径

    1.列出当前目录的文件.文件夹完整路径    ls -1 |awk '{print i$0}' i=`pwd`'/' 2.列出当前目录及子目录的文件.文件夹完整路径    ls -R |awk '{p ...

  3. 洛谷P2279 消防局的设立 [HNOI2003] 贪心

    正解:贪心 解题报告: 传送门! 这题贪心得挺显然的,,,?居然能有蓝,,,是蓝题太水了嘛,,,? 简单说下,这题一看到就能想到,对最低的没被覆盖到的点给它的祖父建一个消防局 没了? 哦这题实现还挺有 ...

  4. function $(id) {}表示什么函数

    function $(id) {}表示什么函数 一.总结 1.就是简写,不然每次打document.getElementById很烦 二.问题 function $(id) {return docum ...

  5. T-SQL中的十大注意事项

    转载自:http://www.cnblogs.com/CareySon/archive/2012/10/11/2719598.html 1.在生产环境中不要出现Select * 这一点我想大家已经是比 ...

  6. QQ公众号?是的,你没看错!

    微信公众平台培育了800多万的微信公众号,自身也通过微信游戏.广告分销等找到了一些增值盈利模式.作为同门大师兄,qq也在11月份推出了QQ公众号,第一个手机QQ上的“生活服务号”——YTO圆通速递上线 ...

  7. [py][mx]django邮箱注册的验证码部分-django-simple-captcha库使用

    邮箱注册-验证码 验证码使用第三方库django-simple-captcha 这个安装图形插件步骤官网有哦 - 1.Install django-simple-captcha via pip: pi ...

  8. R中apply等函数用法[转载]

    转自:https://www.cnblogs.com/nanhao/p/6674063.html 1.apply函数——对矩阵 功能是:Retruns a vector or array or lis ...

  9. clothes

  10. python3中pymysql模块安装及连接数据库(同‘python安装HTMLTestRunner’)

    https://pypi.org/project/PyMySQL/#files 安装完成之后就是连接数据库了 机器上安装了mysql的数据库,并且已经创建了两张表用于测试 python3连接数据库及删 ...