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 (搜索)的更多相关文章
- hdu 5335 Walk Out 搜索+贪心
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total S ...
- HDU 5335 Walk Out BFS 比较坑
H - H Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 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 ...
- hdu 5335 Walk Out(bfs+斜行递推) 2015 Multi-University Training Contest 4
题意—— 一个n*m的地图,从左上角走到右下角. 这个地图是一个01串,要求我们行走的路径形成的01串最小. 注意,串中最左端的0全部可以忽略,除非是一个0串,此时输出0. 例: 3 3 001 11 ...
- HDU 5335——Walk Out——————【贪心】
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- HDU 5335 Walk Out(多校)
Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- hdu 5335 Walk Out (2015 Multi-University Training Contest 4)
Walk Out Time Limit: 2000/10 ...
- HDU 5335 Walk Out (BFS,技巧)
题意:有一个n*m的矩阵,每个格子中有一个数字,或为0,或为1.有个人要从(1,1)到达(n,m),要求所走过的格子中的数字按先后顺序串起来后,用二进制的判断大小方法,让这个数字最小.前缀0不需要输出 ...
- HDU 5335 Walk Out
题意:在一个只有0和1的矩阵里,从左上角走到右下角, 每次可以向四个方向走,每个路径都是一个二进制数,求所有路径中最小的二进制数. 解法:先bfs求从起点能走到离终点最近的0,那么从这个点起只向下或向 ...
随机推荐
- mybatis <!-- useGeneratedKeys="true"把新增加的主键赋值到自己定义的keyProperty(id)中 -->
<!-- useGeneratedKeys="true"把新增加的主键赋值到自己定义的keyProperty(id)中 -->
- System表空间大小有10Gb,使用率达到95%,
System表空间大小有10Gb,使用率达到95%,很好奇, 随后执行如下SQL,查看system表空间中使用空间最多的对象 SQL>SELECT * FROM DBA_SEGMENTS T W ...
- Gerrit实现代码审计(code review)
1.Gerrit是个啥? 实现代码审计,比git(gitlab.github)多了代码审计的功能. 2.两类角色 角色1:我是代码编写者,只能写代码和提交给审计者代码,不能直接把代码合并到线上发布 角 ...
- Java同步锁何时释放?
在测试java多线程中有关 “生产者和消费者” 这个经典问题的时候,写代码测试的时候,思考到一些问题(所以还是要动手,实践才能储真知啊), synchronize 同步锁何时释放,何时获得?重新获得锁 ...
- apache下配置认证用户
有时候我们须要给我apacheserver下制定的文件夹加上用户认证,方便一些而用户进行文件的浏览.配置例如以下: 1 设置用户 1 htpasswd -c file_path user_name 回 ...
- poj 1426 Find The Multiple ( BFS+同余模定理)
Find The Multiple Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18390 Accepted: 744 ...
- HDU 5285 wyh2000 and pupil(dfs或种类并查集)
wyh2000 and pupil Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Other ...
- CMMI 2,3,4,5级涉及的过程域(PA)介绍
CMMI中的PA即Process Area的缩写,中文称为过程域.简单的说就是做好一个事情需要的某一个方面,对于软件开发来说,就是做好软件开发需要的某一个方面. CMMI2.3级共有18个过程域( ...
- Django:视图和URL配置
一.视图 1.在mysite文件夹下.创建views.py文件(文件名称没有特别的要求): from django.http import HttpResponse def hello(re ...
- HDU OJ u Calculate e
这是一道简单的数学计算问题 主义好输出格式就好 #include<stdio.h> int main() { printf("n e\n- -----------\n&quo ...