hdu 2821(dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2821
思路:一开始的时候没注意到,必须从map[i][j]==0的位置开始,然后就是dfs了,回溯的时候稍微注意一下就可以了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std; int n,m,cnt;
char str[];
int map[][];
int dir[][]={{-,},{,},{,-},{,}};
char Dir[]={'U','D','L','R'};
char path[]; bool Judge(int x,int y)
{
if(x>=&&x<n&&y>=&&y<m)
return true;
return false;
} bool dfs(int x,int y,int len)
{
if(len>=cnt){
path[len]=;
return true;
}
for(int i=;i<;i++){
int xx=x+dir[i][];
int yy=y+dir[i][];
if(!Judge(xx,yy)||map[xx][yy])continue;
while(Judge(xx,yy)&&!map[xx][yy]){
xx+=dir[i][];
yy+=dir[i][];
}
if(!Judge(xx+dir[i][],yy+dir[i][]))continue;
int tmp=map[xx][yy];
map[xx+dir[i][]][yy+dir[i][]]+=tmp-;
map[xx][yy]=;
path[len]=Dir[i];
if(dfs(xx,yy,len+))return true;
map[xx+dir[i][]][yy+dir[i][]]-=tmp-;
map[xx][yy]=tmp;
}
return false;
} int main()
{
while(~scanf("%d%d",&m,&n)){
cnt=;
for(int i=;i<n;i++){
scanf("%s",str);
for(int j=;j<m;j++){
if(str[j]!='.'){
cnt+=str[j]-'a'+;
map[i][j]=str[j]-'a'+;
}else
map[i][j]=;
}
}
bool flag=false;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
if(map[i][j]==&&dfs(i,j,)){ //必须从map[i][j]==0的位置开始
flag=true;
printf("%d\n%d\n",i,j);
cout<<path<<endl;
break;
}
}
if(flag)break;
}
}
return ;
}
hdu 2821(dfs)的更多相关文章
- HDU 5143 DFS
分别给出1,2,3,4 a, b, c,d个 问能否组成数个长度不小于3的等差数列. 首先数量存在大于3的可以直接拿掉,那么可以先判是否都是0或大于3的 然后直接DFS就行了,但是还是要注意先判合 ...
- Snacks HDU 5692 dfs序列+线段树
Snacks HDU 5692 dfs序列+线段树 题意 百度科技园内有n个零食机,零食机之间通过n−1条路相互连通.每个零食机都有一个值v,表示为小度熊提供零食的价值. 由于零食被频繁的消耗和补充, ...
- hdu 2821 Pusher (dfs)
把这个写出来是不是就意味着把 http://www.hacker.org/push 这个游戏打爆了? ~啊哈哈哈 其实只要找到一个就可以退出了 所以效率也不算很低的 可以直接DFS呀呀呀呀 ...
- hdu 2821 Pusher(dfs)
Problem Description PusherBoy is an online game http://www.hacker.org/push . There is an R * C grid, ...
- hdu 2821 Pusher (dfs)
Pusher Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others)Total Subm ...
- hdu 2821 学习一点dfs的小技巧吧。。 还是自己太弱了
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int r,c ...
- HDU 2821 Pusher
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2821 首先,题目描述给的链接游戏很好玩,建议先玩几关,后面越玩越难,我索性把这道题A了,也就相当于通关 ...
- HDU 5877 dfs+ 线段树(或+树状树组)
1.HDU 5877 Weak Pair 2.总结:有多种做法,这里写了dfs+线段树(或+树状树组),还可用主席树或平衡树,但还不会这两个 3.思路:利用dfs遍历子节点,同时对于每个子节点au, ...
- hdu 4751(dfs染色)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4751 思路:构建新图,对于那些两点连双向边的,忽略,然后其余的都连双向边,于是在新图中,连边的点是能不 ...
随机推荐
- Makefile之写demo时的通用Makefile写法
Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN 作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...
- Redis总结(二)C#中如何使用redis(转载)
上一篇讲述了安装redis<Redis总结(一)Redis安装>,同时也大致介绍了redis的优势和应用场景.本篇着重讲解.NET中如何使用redis和C#. Redis官网提供了很多开源 ...
- 在Quartus使用TCL脚本文件配制管脚 《本人亲测》
方法一:Import Assignments步骤1: 使用记事本或类似软件新建一个txt文件(或csv文件),按如下格式编写管脚分配内容(不同的开发版,其内容也不同,本文以我使用的DIY_DE2开发板 ...
- php getallheaders使用注意事项
This function is an alias for apache_request_headers(). Please read the apache_request_headers() doc ...
- C++ 多线程(两个线程卖火车票)
#include <windows.h> #include <iostream.h> DWORD WINAPI Fun1Proc(LPVOID lpParameter);//t ...
- AESDK报错AEGP Magic Error的解决
原因是要先释放了流,再释放流的值,顺序问题导致报错. 解决方法是先释放流的值,再释放流 mSuites->StreamSuite2()->AEGP_DisposeStreamValue(v ...
- Java 之进制转换
//十进制转十六进制 import java.util.Scanner; public class Main{ public static void main(String[] args){ Scan ...
- linux中mysql安装的问题
Starting MySQL.Manager of pid-file quit without updating file.[FAILED] 已解决 这是由于系统中/etc/my.cnf文件本身存在或 ...
- Eclipse “cannot be resolved to a type” error
引言: eclipse新导入的项目经常可以看到"XX cannot be resolved to a type"的报错信息.本文将做以简单总结. 正文: (1)jd ...
- UIImageView只显示一半
本来正常的话,UIImageView会在UIScrollView内占满的,但是第一个UIImageView只占了高度的一半左右.如下图,红色的是UIScrollView的背景色,还有那么多没有填充,但 ...