题目链接:

  hdu 5335 Walk Out

题目描述:
  有一个n*m由0 or 1组成的矩形,探险家要从(1,1)走到(n, m),可以向上下左右四个方向走,但是探险家就是不走寻常路,他想让他所走的路线上的0/1组成的二进数最小,现在要为矫情无比的探险家找最优路径咯。

解题思路:
  对于二进制数,前导零是对数字大小没有任何影响的。当到不得不走1的时候就只能向下,或者向右走了。所以先搜索出来一直走零,能走到的最靠近终点的位置,然后在类似搜索,找出最优路径。

 #include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = ;
struct node
{
int x, y;
};
char maps[maxn][maxn];
bool vis[maxn][maxn];
int dir[][] = {,, ,, -,, ,-};
int x, y, n, m;
bool Ok (int x, int y)
{
if (x< || y< || x>=n || y>=m)
return false;
return true;
}
void bfs ()
{
node p, q;
p.x = x, p.y = y;
queue <node> Q;
Q.push (p);
while (!Q.empty())
{
p = Q.front();
Q.pop();
for (int i=; i<; i++)
{
q.x = p.x + dir[i][];
q.y = p.y + dir[i][];
if (Ok(q.x, q.y) && !vis[q.x][q.y])
{
vis[q.x][q.y] = true;
if (maps[q.x][q.y] == '')
Q.push (q);
if (x + y < q.x + q.y)
x = q.x, y = q.y;
}
}
}
}
int main ()
{
int t;
scanf ("%d", &t);
while (t --)
{
memset (vis, false, sizeof(vis));
vis[][] = true;
scanf ("%d %d", &n, &m);
for (int i=; i<n; i++)
scanf ("%s", maps[i]);
x = y = ;
if (maps[x][y] == '')
bfs ();
if (maps[x][y] == '')
putchar('');
else
{
bool nowflag = false;
putchar ('');
for (int i=x+y; i<n+m-; i++)
{
bool flag = false;
for (x=; x<=i; x++)
{
y = i - x;
if (!Ok(x, y) || !vis[x][y])
continue;
if (nowflag && maps[x][y]=='')
continue;
for (int j=; j<; j++)
{
int a = x + dir[j][];
int b = y + dir[j][];
if (!Ok(a, b))
continue;
vis[a][b] = true;
if (maps[a][b] == '')
flag = true;
}
}
nowflag = flag;
putchar (flag?'':'');
}
}
puts("");
}
return ;
}

hdu 5335 Walk Out (搜索)的更多相关文章

  1. hdu 5335 Walk Out 搜索+贪心

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

  2. HDU 5335 Walk Out BFS 比较坑

    H - H Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status ...

  3. 2015 Multi-University Training Contest 4 hdu 5335 Walk Out

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  4. hdu 5335 Walk Out(bfs+斜行递推) 2015 Multi-University Training Contest 4

    题意—— 一个n*m的地图,从左上角走到右下角. 这个地图是一个01串,要求我们行走的路径形成的01串最小. 注意,串中最左端的0全部可以忽略,除非是一个0串,此时输出0. 例: 3 3 001 11 ...

  5. HDU 5335——Walk Out——————【贪心】

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  6. HDU 5335 Walk Out(多校)

    Walk Out Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  7. hdu 5335 Walk Out (2015 Multi-University Training Contest 4)

    Walk Out                                                                         Time Limit: 2000/10 ...

  8. HDU 5335 Walk Out (BFS,技巧)

    题意:有一个n*m的矩阵,每个格子中有一个数字,或为0,或为1.有个人要从(1,1)到达(n,m),要求所走过的格子中的数字按先后顺序串起来后,用二进制的判断大小方法,让这个数字最小.前缀0不需要输出 ...

  9. HDU 5335 Walk Out

    题意:在一个只有0和1的矩阵里,从左上角走到右下角, 每次可以向四个方向走,每个路径都是一个二进制数,求所有路径中最小的二进制数. 解法:先bfs求从起点能走到离终点最近的0,那么从这个点起只向下或向 ...

随机推荐

  1. 高清(200万像素)多灯红外防水枪型网络摄像机 DH-IPC-HFW5200-IRA

    DH-IPC-HFW5200-IRA-0722A http://download.dahuatech.com/instruction_download.php?classOne=3907&cl ...

  2. &quot;undefined reference to strptime&quot;之自己定义strptime函数

    简单介绍   strptime()函数可以依照特定时间格式将字符串转换为时间类型.简单点说可以将字符串时间转化为时间戳. 这个函数包括在time.h头文件里,在Unix或者类Unix系统中,我们会常常 ...

  3. Office EXCEL 如何保留两位小数,四舍五入

    选中若干单元格,然后右击设置单元格格式,数值中保留两位小数   使用round函数四舍五入,如下图所示,我在N10单元格中输入"ROUND(M10,1)"即可,其中ROUND是函数 ...

  4. vs2010下配置CUDA出现kernel launch failed问题,内核无效

    首先, 推荐一篇不错的配置文档~手把手教你 CUDA 5.5与VS2010编译环境的搭建.笔者就是在这篇文章的指导下成功地在VS2010上搭建了CUDA 6.5~ 其次. 文末给出的执行演示样例不好使 ...

  5. 偶遇HiWork,请不要擦肩而过

    非常多朋友可能都不了解HiWork,在这里介绍一下. HiWork是基于云存储的团队即时沟通协作平台,主要针对于中小团队及中小企业的即时沟通,让团队沟通更顺畅.在HiWork平台可即时得知所使用第三方 ...

  6. Pulse-code modulation

    脉冲编码调制(Pulse Code Modulation,PCM),由A.里弗斯于1937年提出的,这一概念为数字通信奠定了基础,60年代它开始应用于市内电话网以扩充容量,使已有音频电缆的大部分芯线的 ...

  7. rip是典型的距离矢量动态路由协议。Ospf是链路状态型的协议

    网络工程师十个常见面试问题-看准网 https://m.kanzhun.com/k-mianshiwenti/1465113.html 两者都属于IGP协议,rip是典型的距离矢量动态路由协议.Osp ...

  8. ECharts 使用

    最近项目中要做图形报表,要求使用echarts实现,图形报表有很多中实现之前也接触过,但echarts还是头一次听说,正好可以趁这个机会好好学习一下它. 之前不知道就不知道啦,现在知道了就了不得了,一 ...

  9. 谈谈对redux的认识

    redux是从flux演变而来,但又独立于react.简言之就是,redux是一种单纯的状态管理器.可以和react搭配,也可以和其它框架搭配. redux有三个重要的部分组成: store, act ...

  10. docker registry的CI规划

    目前代码全部署在docker中, 考虑用jenkins打包成docker包再推送到docker registry 打包推送过程中自动按照日期打标签,并且刷新latest