HDU 2782 The Worm Turns (DFS)
For instance, suppose Winston wakes up in the following patch of earth (X's represent stones, all other cells contain food):
If Winston starts eating in row 0, column 3, he might pursue the following path (numbers represent order of visitation):
In this case, he chose his path very wisely: every piece of food
got eaten. Your task is to help Winston determine where he should begin
eating so that his path will visit as many food cells as possible.
Each test case begins with two positive integers, m and n , defining the
number of rows and columns of the patch of earth. Rows and columns are
numbered starting at 0, as in the figures above. Following these is a
non-negative integer r indicating the number of rocks, followed by a
list of 2r integers denoting the row and column number of each rock. The
last test case is followed by a pair of zeros. This should not be
processed. The value m×n will not exceed 625.OutputFor each test case, print the test case number (beginning with 1), followed by four values:
amount row column direction
where amount is the maximum number of pieces of food that Winston is
able to eat, (row, column) is the starting location of a path that
enables Winston to consume this much food, and direction is one of E, N,
S, W, indicating the initial direction in which Winston starts to move
along this path. If there is more than one starting location, choose the
one that is lexicographically least in terms of row and column numbers.
If there are optimal paths with the same starting location and
different starting directions, choose the first valid one in the list E,
N, S, W. Assume there is always at least one piece of food adjacent to
Winston's initial position.Sample Input
5 5
3
0 4 3 1 3 2
0 0
Sample Output
Case 1: 22 0 3 W
分析
题目大意就是给你一个地图,地图中只有两种元素,墙跟平地,然后要你求出一个人能在这个地图中走的最大距离。这个人一旦开始走路,那么他走的方向将是不变的。除非遇到墙,或者遇到地图的边,亦或者那个格子已经走过了,这个时候这个人才开始更换方向。
然后要你求出这个人能走的最大距离的起始点的位置,输出最大距离,起始点坐标,还有一开始走的方向。(E,N,S,W),如果最大距离相同,那么要输出起始点坐标的字典序最小的那个。
还有,如果四个方向都能达到最大,那么选择的方向的优先级由(E,N,S,W)往下排列。
就是爆搜,题目给的时间很大。我们可以枚举起点,对于每一个点搜索。关于输出,在搜索时按(E,N,S,W)的顺序,在更新答案时,只有当前答案大于记录答案才更新。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <queue>
#include <algorithm>
#include <cstring>
#include <climits>
#define MAXN 626
#define X rx+dx[i]
#define Y ry+dy[i]
using namespace std;
int t=;
int r,m,n,g[MAXN][MAXN],ans[MAXN][MAXN],sx,sy,step,ansdd,ansx,ansy,md,maxx;
int ansd[MAXN][MAXN];
int dx[]={,,-,,},
dy[]={,,,,-};
void dfs(int x,int y)
{
for(int i=;i<=;i++)
{
int rx=x,ry=y;
if(X>=&&X<n&&Y>=&&Y<m&&g[X][Y]==)
{
if(x==sx&&y==sy) md=i;
g[X][Y]=++step;
if(step>ans[sx][sy])
ans[sx][sy]=step,
ansd[sx][sy]=md;
rx+=dx[i];ry+=dy[i];
while(X>=&&X<n&&Y>=&&Y<m&&g[X][Y]==)
{
g[X][Y]=++step;
if(step>ans[sx][sy])
ans[sx][sy]=step,
ansd[sx][sy]=md;
rx+=dx[i];ry+=dy[i];
}
dfs(rx,ry);
while(rx!=x||ry!=y)
{
g[rx][ry]=;
step--;
rx-=dx[i];ry-=dy[i];
}
}
}
}
void init()
{
memset(g,,sizeof(g));
memset(ans,,sizeof(ans));
memset(ansd,,sizeof(ansd));
ansdd=ansx=ansy=md=maxx=;
}
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
while()
{
init();
++t;
scanf("%d%d",&n,&m);
if(n==&&m==)return ;
scanf("%d",&r);
for(int i=;i<=r;i++)
{
int x,y;
scanf("%d%d",&x,&y);
g[x][y]=-;
}
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(g[i][j]!=-)
{
step=;sx=i;sy=j;
g[sx][sy]=-;
dfs(sx,sy);
g[sx][sy]=;
}
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(ans[i][j]>maxx)
{
maxx=ans[i][j];
ansx=i;ansy=j;
ansdd=ansd[i][j];
}
printf("Case %d: %d %d %d ",t,maxx+,ansx,ansy);
if(ansdd==) printf("E\n");
else if(ansdd==) printf("N\n");
else if(ansdd==) printf("S\n");
else if(ansdd==) printf("W\n");
}
return ;
}
HDU 2782 The Worm Turns (DFS)的更多相关文章
- 【HDOJ】2782 The Worm Turns
DFS. /* 2782 */ #include <iostream> #include <queue> #include <cstdio> #include &l ...
- hdu 2782 dfs(限定)
The Worm Turns Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- The Worm Turns
The Worm Turns Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- TOJ 1191. The Worm Turns
191. The Worm Turns Time Limit: 1.0 Seconds Memory Limit: 65536K Total Runs: 5465 Accepted Run ...
- HDU 1241 Oil Deposits --- 入门DFS
HDU 1241 题目大意:给定一块油田,求其连通块的数目.上下左右斜对角相邻的@属于同一个连通块. 解题思路:对每一个@进行dfs遍历并标记访问状态,一次dfs可以访问一个连通块,最后统计数量. / ...
- hdu 1241 Oil Deposits(DFS求连通块)
HDU 1241 Oil Deposits L -DFS Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & ...
- TJU ACM-ICPC Online Judge—1191 The Worm Turns
B - The Worm Turns Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Su ...
- HDOJ(HDU).1258 Sum It Up (DFS)
HDOJ(HDU).1258 Sum It Up (DFS) [从零开始DFS(6)] 点我挑战题目 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双 ...
- HDOJ(HDU).1016 Prime Ring Problem (DFS)
HDOJ(HDU).1016 Prime Ring Problem (DFS) [从零开始DFS(3)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架 ...
随机推荐
- PHP SOAP 使用示例
soap_client.php <?php try { $client = new SoapClient( null, array('location' =>"http://lo ...
- 使用命令:ssh-add 时,出现 “Could not open a connection to your authentication agent.”
为 GitHub 账号设置 SSH Key时, 使用命令:ssh-add,出现“Could not open a connection to your authentication agent”,解决 ...
- JavaScript 运行机制 & EventLoop
JavaScript 运行机制 & EventLoop 看阮老师博客和自己的理解,记录的学习笔记,js的单线程和 事件EventLoop 机制. 1. JavaScript是单线程 JavaS ...
- [读书笔记] R语言实战 (五) 高级数据管理
1. 数值函数 1) 数学函数 2) 统计函数 3. 数据标准化 scale() 函数对矩阵或者数据框的指定列进行均值为0,标准化为1的标准化 mydata <- data.frame(c1=c ...
- 在centos里安装Nginx
(1)下载Nginx的RPM包 wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx ...
- 转载一遍比较好的,django2.1搭建博客教程
非常感谢这位博主,找了几个星期终于找到了 https://www.dusaiphoto.com/article/article-detail/4/
- vue 过滤器使用的传参说明
在table中,需要对obj的数据类型进行文字转换,例如后台接口返回的姓别值:1,2.其中需要页面根据字典需要把1=>男,2=>女进行转换. 以前的习惯是每一个过滤方法都写一个方法进行转换 ...
- js 如何判断浏览器是否禁用cookie
语法:navigator.cookieEnabled: 如果浏览器启用了cookie,该属性值为true.如果禁用了cookie,则值为false. navigator: JavaScript中的一个 ...
- poj 3254 Corn Fields (状压dp)(棋盘dp)
状压dp入门题 因为当前行的状态只和上一行有关 所以可以一行一行来做 因为m <= 12所以可以用二进制来表示放了或者没有放 0表示没放,1表示放 f[i][state]表示第i行状态为stat ...
- 2014年辛星解读css第三节
第二节我们讲述的差点儿全是CSS的选择器,那么以下这一节我们来讲一下CSS的颜色和文本的一些东西,尽管我对调色不大敏感.可是对于颜色还是比較感兴趣的. *********CSS中的颜色******** ...