#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; int r,c,s,flag;
int
dir[][] = {{,},{-,},{,},{,-}};
char
mapp[][],road[],d[] = {"DURL"}; bool check(int x,int y)
{

if
(x < || x >= r || y < || y >= c) return false;
return
true;
}
void dfs(int x,int y,int num) //表示出发位置为(x,y),已经消灭了num个箱子
{
if
(num >= s)
{

road[num] =;
flag =;
return
;
}

for
(int k =; k <; k++)
{

int
i = x + dir[k][];
int
j = y + dir[k][];
if
(!check(i,j) || mapp[i][j]) continue; //(1)下一步就走出界外,或者与箱子之间没有空格
while(check(i,j) && !mapp[i][j])//(2)对于不能临时改变方向的搜索这个方法比较适用
i += dir[k][], j += dir[k][];
if
(!check(i + dir[k][],j + dir[k][])) continue; //到达棋盘边缘,不能推
int t = mapp[i][j];
mapp[i+dir[k][]][j+dir[k][]] += t -;
mapp[i][j] =;
road[num] = d[k];
dfs(i,j,num+);
if
(flag) return;
mapp[i+dir[k][]][j+dir[k][]] -= t -;//状态的恢复过程
mapp[i][j] = t;
}
}
int main()
{

while
(scanf("%d%d",&c,&r)!=EOF)
{

s = flag =;
for
(int i =; i < r; i++)
{

getchar();
scanf("%s",mapp[i]);
for
(int j =; j < c; j++)
{

if
(mapp[i][j] == '.') mapp[i][j] =;
else
mapp[i][j] -= 'a' -;
s += mapp[i][j];
}
}

for
(int i =; i < r; i++)
{

if
(flag) break;
for
(int j =; j < c; j++)
{

if
(mapp[i][j]) continue;
dfs(i,j,);
if
(flag ==)
{

printf("%d\n%d\n",i,j);
printf("%s\n",road);
break
;
}
}
}
}

return
;
}

hdu 2821 学习一点dfs的小技巧吧。。 还是自己太弱了的更多相关文章

  1. Linux命令学习之两个小技巧(1)

    本篇主要想讲两个小技巧.本来技巧之类的话应该放在学完整个东西之后或者在学习中遇到时再说的,但是这两个技巧其实很简单,很多人只要我一提就知道了.与其说是技巧,不如说是注意事项. 自动补全 在Linux终 ...

  2. hdu 2821 Pusher (dfs)

    把这个写出来是不是就意味着把   http://www.hacker.org/push  这个游戏打爆了? ~啊哈哈哈 其实只要找到一个就可以退出了  所以效率也不算很低的  可以直接DFS呀呀呀呀 ...

  3. hdu 2821 Pusher(dfs)

    Problem Description PusherBoy is an online game http://www.hacker.org/push . There is an R * C grid, ...

  4. 学习笔记22—PS小技巧

    1.将图片四角变弧形:菜单-->选择-->平滑-->设置参数: 2.画曲线的方法是: 1)选择钢笔工具, 2)工具属性选择路径:用钢笔点下路径的起点,点下即松开鼠标:在下一个锚点,点 ...

  5. html/css/js小技巧实例

    一些学习中碰到的小技巧 让div自动撑起来: .clearfix:after{ content: "."; clear: both; display: block; visibil ...

  6. 如何规范移动应用交互设计?UI/UX设计师须知的11个小技巧

    以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 十年前,手机的使用只是为了沟通. 而近几年,情况发生了很大变化,我们很难找到不使用手机的人.手机在极 ...

  7. HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

    传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/detai ...

  8. Android学习--还有一些小技巧

    这些小技巧 通过上面的这些文章,就把简单的安卓项目总结了一遍,当然你说懂这些就可以做Android开发的话还是不行的,欠缺的还有很多,但欠缺的这些我们有只能在工作中去总结以及不断的提高,这篇文章我们还 ...

  9. JAVA学习之Ecplise IDE 使用技巧(2)第二章:键盘小快手,代码辅助

    上一篇:JAVA学习之Ecplise IDE 使用技巧(1)第一章:我的地盘我做主,工作空间 第二章:键盘小快手,代码辅助 内容包括: 第一:显示行号 如何设置行号:Ecplice菜单Windows& ...

随机推荐

  1. 解决Maven的jar包冲突问题

    1. 问题描述 控制台说:无法将 com.zpx.servlet.MyServlet 识别为 javax.servlet.Servlet 2. 问题原因 Maven的一个核心功能就是一键构建,所以Ma ...

  2. Maven Web项目出现org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException错误

    1. 问题描述 初学Maven,新建了一个基于Web骨架的Web项目,jar 包也导好了,作用域也设置正确了,Tomcat也正常运行了,可是就是说编译错误. 2. 问题原因 虽然我配置了Tomcat ...

  3. [Tex学习笔记]让项目编号从4开始

    微信扫描如上二维码关注跟锦数学微信公众账号. 详情请见那里.

  4. 数据库中的几个概念 - LGWR, ARCH,ASYNC,SYNC,AFFIRM

    双机热备(双机容错)就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务.当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务 双 ...

  5. [MySql]当虚拟机的IP地址自动更换后,JDBC使用原来的配置连不上MySql数据库时所报的异常。

    Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. ...

  6. 2.4 Go语言基础之切片

    本文主要介绍Go语言中切片(slice)及它的基本使用. 一.引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性. 例如: func arraySum(x [3]int) ...

  7. C之指针

    什么是指针 * 指针变量:用来存储某种数据在内存中的地址.* 世面上书籍一般把指针和指针变量的概念混在一起了.市面上的书籍说的指针指的就是指针变量 Ø *号的三种含义1. 两个数相乘int i =5; ...

  8. 自定义Camera的setPictureSize拍照完毕出现花屏怎么解决

    Camera.Parameters parameters = mCamera.getParameters();// 获得相机参数 List<Camera.Size> sizes = par ...

  9. C++ ++pos vs pos++

    list<char>::iterator pos; 一般使用前置式递增(preincrement),因为它比后置式递增(postincrement)效率高,因为后置式递增内部需要一个临时对 ...

  10. org/springframework/cache/jcache/config/AbstractJCacheConfiguration.class

    在使用Spring-MVC环境时  报错: Failed to parse configuration class [org.springframework.cache.aspectj.AspectJ ...