[USACO06JAN]树林The Grove
树木(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的更多相关文章
- P2864 [USACO06JAN]树林The Grove
P2864 [USACO06JAN]树林The Grove 神奇的射线法+bfs 裸的bfs很难写....... 那么我们找一个最外围障碍点,向图的外边引一条虚拟射线. 蓝后bfs时经过这条射线奇数次 ...
- Luogu P2864 [USACO06JAN]树林The Grove(bfs)
P2864 [USACO06JAN]树林The Grove(bfs) 题面 题目描述 The pasture contains a small, contiguous grove of trees t ...
- 【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 ...
随机推荐
- [Leetcode easy]存些水题34、20、700
leetcode 34 最早出现和最后出现 class Solution { public int[] searchRange(int[] nums, int target) { int []ans= ...
- 高通sdm845_la2.0源码编译及使用QFIL刷机
一.下载源码 高通芯片代码下载地址:https://chipcode.qti.qualcomm.com/ . *_amss_standard_oem : 高通私有源码(*为sdm845-la--. * ...
- 单链表数据结构 - java简单实现
链表中最简单的一种是单向链表,每个元素包含两个域,值域和指针域,我们把这样的元素称之为节点.每个节点的指针域内有一个指针,指向下一个节点,而最后一个节点则指向一个空值.如图就是一个单向链表 一个单向链 ...
- el和jstl标签库讲解视频
https://www.bilibili.com/video/av22415283/?p=1
- Thread类源码解析
源码版本:jdk8 其中的部分论证和示例代码:Java_Concurrency 类声明: Thread本身实现了Runnable接口 Runnable:任务,<java编程思想>中表示该命 ...
- 收藏nginx学习
http://blog.csdn.net/u012186351/article/details/50605672 http://blog.csdn.net/qq_25371579/article/de ...
- sdn交换机和普通交换机区别
SDN交换机基本具有普通交换机的所有功能.SDN交换机特别的功能在于支持OpenFlow协议(有些只支持OpenFlow1.0,有些强点支持1.0和1.3).不过你要连接交换机再手动将所需的端口改成支 ...
- ip代理简单方法
requests.post(url-url,headers=headers,data=data,proxies={'https':'192.165.1.56:8000'}
- npm ERR! Unexpected end of JSON input while parsing near...错误
问题解决方案在GitHub中: https://github.com/vuejs-templates/webpack/issues/990 总结一下:1.删除package-lock.json 2.进 ...
- Vasya and Binary String(来自codeforces
题目大意: 给定一个0/1字符串,每次你可以将此字符串中一段连续的任意长度的0/1子串消除掉,注意每次消除的子串中只能有0或者1一种字符,消除掉一串长度为i的0/1字符串会得到a[i]的收益,问将这个 ...