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 ...
随机推荐
- easyui datagrid 加载 历险记(dom中已经加载,fit:true 时改变浏览器大小是会显示出来)
(dom中已经加载,fit:true 时改变浏览器大小是会显示出来) 第一个想到的就是resize datagird 大小!可是没有用 ... 答案是加载的的div height为0导至的(//To ...
- easyui-combo个人实例
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 洛谷P3953 逛公园 [noip2017] 图论+dp
正解:图论(最短路)+dp(记忆化搜索) 解题报告: 这题真的是个好东西! 做了这题我才发现我的dij一直是错的...但是我以前用dij做的题居然都A了?什么玄学事件啊...我哭了TT 不过其实感觉还 ...
- Python yield 使用浅析(转)
add by zhj: 说到yield,就要说说迭代器.生成器.生成器函数. 迭代器:其实就是一个可迭代对象,书上说迭代器,我个人不喜欢这个说法,有点晦涩.可迭代对象基本上可以认为是有__iter__ ...
- nodejs(四)file System模块 解决Cross device link错误 EXDEV
var fs = require('fs'); /*cross device link fs.rename('c:\\err.LOG','d:\\err.LOG',function(err){ con ...
- 【HTML5】初识HTML5
HTML5 简介 HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. HTML5的设计目的是为了在移动设备上支持多媒体. HTML5 简单易学. HTML5 是下 ...
- LoadRunner中获取当前系统时间方法
LoadRunner中获取当前系统时间方法 发表于:2017-6-02 11:41 作者:人生_0809 来源:51Testing软件测试网采编 字体:大 中 小 | 上一篇 | 下一篇 | 打 ...
- React Native开发之IDE(Atom+Nuclide)安装,运行,调试
版权声明:本文为博主原创文章,如需转载请注明出处 目录(?)[-] 前言 MacWindowsLinux 准备工作 安装Atom 安装Nuclide 新建一个工程 自动补全 类型标注 语法检查 跳 ...
- 第22章 CLR寄宿和AppDomain
22.1 CLR寄宿 CLR Hosting(CLR 宿主)的概念:初始启动.Net Application时,Windows进程的执行和初始化跟传统的Win32程序是一样的,执行的还是非托管代码,只 ...
- 【weka】分类,cross-validation,数据
一.分类classifier 如何利用weka里的类对数据集进行分类,要对数据集进行分类,第一步要指定数据集中哪一列做为类别,如果这一步忘记了(事实上经常会忘记)会出现“Class index is ...