树木(grove)
Time Limit: 1Sec Memory Limit: 64 MB
【Description】
牧场里有一片树林,林子里没有坑.
贝茜很想知道,最少需要多少步能围绕树林走一圈,最后回到起点.她能上
下左右走,也能走对角线格子.牧场被分成R 行C 列(1≤R≤50,1≤C≤50).下
面是一张样例的地图,其中“.”表示贝茜可以走的空地, “X”表示树林, “*”
表示起点.而贝茜走的最近的路已经特别地用“+”表示出来.

...+...
..+X+..
.+XXX+.
..+XXX+
..+X..+
...+++*
题目保证,最短的路径一定可以找到.
【Input】
第1 行输入R 和C,接下来R 行C 列表示一张地图.地图中的符号如题
干所述.
【Output】、
输出最少的步数.
【Sample Input】
6 7
.......
...X...
..XXX..
...XXX.
...X...
......*
【Sample Output】
13

题解:

有一种很有意思的做法就是随便找一棵树向下沿出一条线,不能从右向左跨越这条线,如果从左向右跨越这条线的话就记为dis[1][x][y],那么只要是跨过了这条线就形成了一个环啦,最后的答案当然是dis[1][bx][by]

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
using namespace std;
const int INF=1e9;
const int cc[][]={{,},{-,},{,-},{,},{,},{-,-},{-,},{,-}};
int dis[][][],bx,by,r,c,caty,catx;char st[][];
struct hh{int x,y,id;};
void bfs()
{
queue<hh>q;
q.push((hh){bx,by,});
memset(dis,0x7f,sizeof(dis));
dis[][bx][by]=;
while (!q.empty())
{
hh now=q.front(); q.pop();
for (int i=;i<;i++)
{
int xx=now.x+cc[i][],yy=now.y+cc[i][];
if (xx< || yy< || xx>r || yy>c || st[xx][yy]=='X') continue;
if (yy==caty && now.y>caty && now.x>catx) continue;
if (now.y==caty && yy>caty && now.x>catx)
{
if (dis[][xx][yy]>dis[][now.x][now.y]+)
{
dis[][xx][yy]=dis[][now.x][now.y]+;
q.push((hh){xx,yy,});
}
}
else
{
if (dis[now.id][xx][yy]>dis[now.id][now.x][now.y]+)
{
dis[now.id][xx][yy]=dis[now.id][now.x][now.y]+;
q.push((hh){xx,yy,now.id});
}
}
}
}
printf("%d",dis[][bx][by]);
}
int main()
{
int i,j;
scanf("%d%d",&r,&c);
bool vv=;
for (i=;i<=r;i++)
{
scanf("%s",st[i]+);
for (j=;j<=c;j++)
{
if (st[i][j]=='*') bx=i,by=j;
if (st[i][j]=='X' && !vv) vv=,caty=j,catx=i;
}
}
bfs();
}

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

  1. P2864 [USACO06JAN]树林The Grove

    P2864 [USACO06JAN]树林The Grove 神奇的射线法+bfs 裸的bfs很难写....... 那么我们找一个最外围障碍点,向图的外边引一条虚拟射线. 蓝后bfs时经过这条射线奇数次 ...

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

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

  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. python操作samba

    最近在部署完xxl-job后,陆续将一些日常性执行的python脚本迁移到上面去:其中部分脚本涉及到对samaba的操作,先后尝试了pysmb.fs.smbfs.pysmbclient pysmb 安 ...

  2. 练习 map集合被使用是因为具备映射关系 "进度班" "01" "张三" "进度班" "02" "李四" "J1701" "01" "王五" "J1701" "02" "王二" 此信息中,我们要怎样把上述信息装入集合中, 根据班级信息的到所有的所有信

    package com.rf.xs; import java.util.Arrays; public class Student01 { String name; int age; public St ...

  3. 解决sublime text 3使用Install Package时出现There are no packages available for installation问题

    package control一直弹出There are no packages available for installation,由于国内环境屏蔽了https://packagecontrol. ...

  4. linux之正则

    grep命令: -V      打印grep的版本号 -E      解释PATTERN作为扩展正则表达式,也就相当于使用egrep. -F      解释PATTERN作为固定字符串的列表,由换行符 ...

  5. 在Linux服务器上使用Vbox安装虚拟机

    先去官网(www.virtualbox.org)上下载对应Linux系统的Vbox版本. 我这边用的是Oracle Linux 7系统(KDE安装) 使用rpm安装virtualbox 发现报错,按照 ...

  6. Linux命名空间

    Linux Namespaces机制提供一种资源隔离方案.PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个Namespace里面的资源对其他Namespa ...

  7. Date对象方法

    创建Date               new  Date() Date对象方法: get系列: getDate()            返回一个月中的某一天(1-31) getDay()    ...

  8. APP自动化框架-ATX原理解析及JAVA版客户端

    作为网易开源的ATX APP自动化测试框架,对比现有的macaca自动化框架/Appium自动化框架,最大的特别就是在于可远程进行自动化测试 先给大家看一张我自己梳理的框架架构图 框架巧妙点: 1. ...

  9. 搞Java

    上班之余,开始研究Java了. 想想从三月份开始自己啃书以来,Spring+Mybatis+公司框架的用法,基本都是速成来的,还是有些恐惧的. Spring万般爽,annotion用的很舒服,但还是想 ...

  10. 2018-软工机试-B- 梵高先生

    B. 梵高先生 单点时限: 1.0 sec 内存限制: 256 MB 谁的父亲死了 请你告诉我如何悲伤 谁的爱人走了 请你告诉我如何遗忘 ——李志<梵高先生> 2009年的最后一天 在义乌 ...