#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. vue实现购物清单列表添加删除

    vue实现购物清单列表添加删除 一.总结 一句话总结: 基础的v-model操作,以及数组的添加(push)删除(splice)操作 1.checkbox可以绑定数组,也可以直接绑定值? 绑定数组就是 ...

  2. 安装jdk1.8.0_11环境脚本

    安装jdk1.8.0_11的脚本,具体的版本可在脚本中调整,发现最后的重置环境变量没生效,还得再终端界面source /etc/profile [root@ZFVM-APP-- ~]# vim jdk ...

  3. linux的最简socket编程

    一.背景 好久没有进行linux下的socket编程了,复习一下 二.服务端完整代码 #include <stdio.h> #include <stdlib.h> #inclu ...

  4. 自己写了个简单的redis分布式锁【我】

    自己写了个简单的redis分布式锁 [注意:此锁需要在每次使用前都创建对象,也就是要在线程内每次都创建对象后使用] package redis; import java.util.Collection ...

  5. oracle相关知识点

    oracle数据库,实例名和数据库是一一对应的,oracle服务端可以启动多个实例,对应于多个数据库. 数据库可以通过sqlplus / as sysdba 进入默认SID的实例, 查看当前的实例名: ...

  6. breadwinner-养家之人_20190220

    " 在我们那里,人是最珍贵的.话要说的更有道理,而不是提高音量,毕竟滋养花朵的是雨水,而不是雷鸣“ ”我叫苏莱曼,我的爸爸是个教师,我的妈妈是个作家.有一天我在路上看到一个玩具,就把它捡起来 ...

  7. 本地文件上传到Linux服务器

    1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地目录) 例如scp root@192.168.0.101: ...

  8. Linux学习笔记:vim

    目录 模式 命令模式 编辑模式 底行模式 .vimrc .viminfo .swap 本文更新于2019-09-05. 说明:下文中,使用{}引起表示自定义变量,根据实际情况填写.使用[]引起表示内容 ...

  9. Grep---linux系统三剑客(一)

    grep .sed.awk被称为linux中的"三剑客". grep 更适合单纯的查找或匹配文本 sed  更适合编辑匹配到的文本 awk  更适合格式化文本,对文本进行较复杂格式 ...

  10. 《剑指offer》字符串专题 (牛客11.01)

    字符串的题目难度不一,涉及到的考点有字符串处理.字符串匹配(自动机.正则).模拟,以及递归.动态规划等算法. 难度 题目 知识点 ☆ 02. 替换空格 从后往前 ☆☆ 27. 字符串的排列 回溯,St ...