hdu5336 Walk Out

题意是:入口:地图的左上角,出口,地图的右上角,求所经过的路径的二进制数最小

照着题解敲了一遍

思路是:首先 二进制 的 位数 越小 越好,其次 二进制的前缀零越多 表示 值越小

首先 在前缀是0的情况下走到最远(最远的定义是 当前坐标是 i , j 则 在保证 位数越小的情况下 则 还剩下 n-i + m-j 的路要走)

剩下的路 必须 向 右走 或者向 下 走,然后 在 其中 选取 0 尽量 多的 路

代码:非原创!!!(from 多校题解)

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue> using namespace std;
const int MAXN = +;
bool vis[MAXN][MAXN];
char graph[MAXN][MAXN];
int n,m;
int dr[] = {,,,-};
int dc[] = {,-,,};
struct Node{
int x,y;
}; void bfs(){
memset(vis,,sizeof(vis));
vis[][] = ;
queue<Node>q;
Node tmp;
tmp.x = ,tmp.y = ;
q.push(tmp);
int mx = ;
while(!q.empty()){
tmp = q.front();
q.pop();
if(graph[tmp.x][tmp.y] > ''){
continue;
}
for(int i = ;i < ;i++){
int xx = tmp.x + dr[i];
int yy = tmp.y + dc[i];
if(xx<||yy<||xx>n||yy>m || vis[xx][yy]){
continue;
}
// cout << "x = " << tmp.x << " y = " << tmp.y << endl;
Node tt;
tt.x = xx;
tt.y = yy;
vis[xx][yy] = ;
mx = max(mx,xx+yy);
// cout << "x = " << xx << " y = " << yy << endl << endl;;
q.push(tt);
}
}
if(vis[n][m] && graph[n][m] == ''){
printf("0\n");
return;
}
printf("");
for(int i = mx;i < m+n;i++){
char mi = '';
for(int j = ;j <= n;j++){
if(i-j > && i-j <= m && vis[j][i-j]){
mi = min(mi,graph[j+][i-j]); //向右走
mi = min(mi,graph[j][i-j+]);//向下走
}
}
printf("%c",mi);
for(int j = ;j <= n;j++){
if(i-j > && i-j <= m && vis[j][i-j]){
if(mi == graph[j+][i-j]){
vis[j+][i-j] = ;
}
if(mi == graph[j][i-j+]){
vis[j][i-j+] = ;
}
}
}
}
printf("\n");
}
int main(){
// freopen("input.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i = ;i <= n;i++){
scanf("%s",graph[i]+);
}
for(int i = ;i <= n+;i++){
graph[i][] = '';
graph[i][m+] = '';
}
for(int i = ;i < m+;i++){
graph[][i] = '';
graph[n+][i] = '';
}
bfs();
}
return ;
}

hdu5336 Walk Out的更多相关文章

  1. python os.walk()

    os.walk()返回三个参数:os.walk(dirpath,dirnames,filenames) for dirpath,dirnames,filenames in os.walk(): 返回d ...

  2. LYDSY模拟赛day1 Walk

    /* 依旧考虑新增 2^20 个点. i 只需要向 i 去掉某一位的 1 的点连边. 这样一来图的边数就被压缩到了 20 · 2^20 + 2n + m,然后 BFS 求出 1 到每个点的最短路即可. ...

  3. How Google TestsSoftware - Crawl, walk, run.

    One of the key ways Google achievesgood results with fewer testers than many companies is that we ra ...

  4. poj[3093]Margaritas On River Walk

    Description One of the more popular activities in San Antonio is to enjoy margaritas in the park alo ...

  5. os.walk()

    os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. walk()方法语法格式如下: os.walk(top[, topdown=True[, onerror=None[ ...

  6. 精品素材:WALK & RIDE 单页网站模板下载

    今天,很高兴能向大家分享一个响应式的,简约风格的 HTML5 单页网站模板.Walk & Ride 这款单页网站模板是现代风格的网页模板,简洁干净,像素完美,特别适合用于推广移动 APP 应用 ...

  7. 股票投资组合-前进优化方法(Walk forward optimization)

    code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...

  8. Go Walk教程 - 流程控制( switch)

    Go的 switch 非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项,不要break: var score =98 var result string switch score/ ...

  9. [py]os.walk爬目录&sys.argv灵活获取参数

    1, 遍历目录 os.walk('/tmp') os.next()   2,sys.argv ######################################## py@lanny:~/t ...

随机推荐

  1. shell学习之用户管理和文件属性

    1.组和用户的添加 添加组: groupadd [-g gid [-o]] [-r] [-f] group 示例: groupadd -g testgoup1 #添加组testgroup1,同时指定g ...

  2. shell学习之字符串处理

    1.获取字符串长度 value=abcd;echo ${#value} 输出:42.获取子串 value=abcd;:} 输出:d value:a:b,其中a表示起始位置,b表示获取的子串的长度. 3 ...

  3. Java 如何判断一个字符是否是数字或字母

    在C++中, 可以用isdigit()判断一个字符是否是数字,可以用isalpha()判断一个字符是否是字母,还有很多,都在<cctype>头文件中 而类似的方法在JAVA中,则主要是Ch ...

  4. uva11021 - Tribles(概率)

    11021 - Tribles GRAVITATION, n.“The tendency of all bodies to approach one another with a strengthpr ...

  5. PIGS(最大流)

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18742   Accepted: 8511 Description ...

  6. 在优化SQL语句中使用虚拟索引

    定义:虚拟索引(virtual index) 是指没有创建对应的物理段的索引. 虚拟索引的目的:是在不损耗主机CPU,IO,磁盘空间去实际创建索引的情况下,来判断一个索引是否能够对SQL优化起到作用. ...

  7. 自己动手为PHP7添加新的语法特性

    好文章! nikic介绍了如何向PHP添加新的语法特性,原文写的非常精彩,具体是添加in语法功能,使最终实现: <?php $words = ['hello', 'world', 'foo', ...

  8. [Swust OJ 1084]--Mzx0821月赛系列之情书(双线程dp)

    题目链接:http://acm.swust.edu.cn/problem/1084/ Time limit(ms): 1000 Memory limit(kb): 65535   Descriptio ...

  9. javascript 学习随笔6

    改变html内容 document.getElementById("p1").innerHTML="New text!"; var element=docume ...

  10. Dreamer2.1 发布 新增将Bean解析成xml和json

    一个上午,增加两个功能 1.直接将对象解析成XML 2.将对象解析成JSON 对象可以是数组,可以是集合,也可以是单个对象 源码和jar下载地址:http://pan.baidu.com/share/ ...