题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1072

思路:深搜每一个节点,并且进行剪枝,记录每一步上一次的s1,s2;如果之前走过的时间小于这一次,

就说明有更短的;路径,所以就不用继续遍历下去。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[][],step[][],tim[][],m,n,ans;
int zz[][]={{-,},{,},{,},{,-}};
void dfs(int x,int y,int s1,int s2)
{
//cout<<"a=="<<x<<" "<<y<<" "<<a[x][y]<<endl;
if(s1<=||s2>=) return ;
if(x<=||x>n||y<=||y>m) return ;
if(a[x][y]==) return ;
if(a[x][y]==)
{
ans=min(ans,s2);
return ;
}
if(a[x][y]==)
{
s1=;
}
if(step[x][y]<=s2&&tim[x][y]>=s1) return ;
step[x][y]=s2;
tim[x][y]=s1;
for(int i=;i<;i++)
{
int tx=x+zz[i][],ty=y+zz[i][];
dfs(tx,ty,s1-,s2+);
}
}
int main(void)
{
int i,j,t,sx,sy;
scanf("%d",&t);
while(t--)
{
memset(a,,sizeof(a));
scanf("%d %d",&n,&m);
for(i=;i<=n;i++)
for(j=;j<=m;j++)
{
tim[i][j]=;
step[i][j]=;
scanf("%d",&a[i][j]);
if(a[i][j]==) sx=i,sy=j;
}
ans=;
dfs(sx,sy,,);
if(ans==)
printf("-1\n");
else
printf("%d\n",ans);
}
return ;
}

用bfs做就要简单一点。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int ans,e[][],m,n;
int zz[][]={{,},{,-},{,},{-,}};
struct Node{
int x,y;
int step,tim;
};
Node tmp;
void bfs()
{
Node tp;
queue <Node> q;
q.push(tmp);
while(!q.empty())
{
tmp=q.front();
q.pop();
for(int i=;i<;i++)
{
tp.x=tmp.x+zz[i][];
tp.y=tmp.y+zz[i][];
tp.step=tmp.step-;
tp.tim=tmp.tim+;
if(tp.x<=||tp.x>n||tp.y<=||tp.y>m||tp.step<=) continue;
if(e[tp.x][tp.y]==) continue; //cout<<"a="<<tp.x<<" "<<tp.y<<" "<<e[tp.x][tp.y]<<endl;
if(e[tp.x][tp.y]==)
{
ans=tp.tim;
return ;
}
else if(e[tp.x][tp.y]==)
{
q.push(tp);
}
else if(e[tp.x][tp.y]==)
{
tp.step=;
e[tp.x][tp.y]=;
q.push(tp);
}
}
}
}
int main(void)
{
int t,i,j,sx,sy;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
scanf("%d",&e[i][j]);
if(e[i][j]==)
{
tmp.x=i;
tmp.y=j;
tmp.step=;
tmp.tim=;
}
}
}
//memset(vis,0,sizeof(vis));
ans=-;
bfs();
printf("%d\n",ans);
}
return ;
}

hdu - 1072(dfs剪枝或bfs)的更多相关文章

  1. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  2. hdu 4109 dfs+剪枝优化

    求最久时间即在无环有向图里求最远路径 dfs+剪枝优化 从0节点(自己添加的)出发,0到1~n个节点之间的距离为1.mt[i]表示从0点到第i个节点眼下所得的最长路径 #include<iost ...

  3. HDU 5113 dfs剪枝

    题意:告诉格子规格,颜色个数,以及每个颜色能涂得格子数目,问是否能够实现相邻两个格子的颜色数目不相同. 分析:因为数据很小,格子最多是5 * 5大小的,因此可以dfs.TLE了一次之后开始剪枝,31m ...

  4. Tempter of the Bone HDU 1010(DFS+剪枝)

    Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...

  5. hdu 1518 dfs+剪枝

    题目大意:几根棒子能否组成一个正方形 Sample Input3           //测试组数4 1 1 1 1   //棒子数目以及每根棒子的长度5 10 20 30 40 508 1 7 2 ...

  6. HDU 5952 Counting Cliques 【DFS+剪枝】 (2016ACM/ICPC亚洲区沈阳站)

    Counting Cliques Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  7. HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))

    Equation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  8. HDU 1501 Zipper 【DFS+剪枝】

    HDU 1501 Zipper [DFS+剪枝] Problem Description Given three strings, you are to determine whether the t ...

  9. hdu 5887 Herbs Gathering (dfs+剪枝 or 超大01背包)

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5887 题解:这题一看像是背包但是显然背包容量太大了所以可以考虑用dfs+剪枝,贪心得到的不 ...

随机推荐

  1. JS实现拖动效果

    有个问题就是该模块要使用定位,因为有left,top属性使用,绝对定位和相对定位都行,当然你也可使用margin-left,和margin-top这2个属性,替换left,top也是可以得 这样就不用 ...

  2. framework4.0 IIS配置支持ashx

    framework4.0 https://www.microsoft.com/zh-cn/download/details.aspx?id=17718 IIS添加对ashx文件的支持 http://w ...

  3. TTreeView.OnCustomDrawItem

    TTreeNode *node; node = , "AAAA"); TreeView1->Items->AddChild(node, "aaa1" ...

  4. ABAP-BarCode-1-HTML二维码打印及动态屏幕实现

    很久很久...以前写的一个测试程序,主要是通过ABAP与HTML交互,编写JavaScript实现二维码及动态屏幕实现. 1.ABAP界面效果 2.实现代码 *&--------------- ...

  5. iOS 真机调试 Xcode 显示 device Error: device unavailable

    一般来说有两个原因: 1. iphone没有加到test device里,将iphone的设备id加到test device列表里 2. Xcode不支持当前的iOS版本,将Xcode升级到最新版

  6. python帮助信息查看以及笔记

    如何获取使用帮助: 获取对象支持使用的属性和方法:dir() dir()不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表.如果参数包含方法__dir__(), ...

  7. NUMA体系结构介绍

    为什么会有NUMA? 在NUMA架构出现前,CPU欢快的朝着频率越来越高的方向发展.受到物理极限的挑战,又转为核数越来越多的方向发展.如果每个core的工作性质都是share-nothing(类似于m ...

  8. ssh反向连接内网主机

    holer听别人说也挺好用不过本人没试过:https://github.com/Wisdom-Projects/holer 利用autossh建立稳定隧道,前提双方互加公钥信任. # yum inst ...

  9. Linux逻辑卷的拉伸和缩小

    相对于普通磁盘优势是逻辑卷可以在线动态的拉伸(不用先unmount操作),只要vg中有足够的空间即可 1:首先查看vg是否有足够的空间 [root@gechong mapper]# vgdisplay ...

  10. Delphi操作Excel(Use Oel)

    Use ComObj: procedure TorderMore1.BitBtn2Click(Sender: TObject);var  xlsFile:WideString;  var ExcelA ...