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的更多相关文章
- python os.walk()
os.walk()返回三个参数:os.walk(dirpath,dirnames,filenames) for dirpath,dirnames,filenames in os.walk(): 返回d ...
- LYDSY模拟赛day1 Walk
/* 依旧考虑新增 2^20 个点. i 只需要向 i 去掉某一位的 1 的点连边. 这样一来图的边数就被压缩到了 20 · 2^20 + 2n + m,然后 BFS 求出 1 到每个点的最短路即可. ...
- How Google TestsSoftware - Crawl, walk, run.
One of the key ways Google achievesgood results with fewer testers than many companies is that we ra ...
- poj[3093]Margaritas On River Walk
Description One of the more popular activities in San Antonio is to enjoy margaritas in the park alo ...
- os.walk()
os.walk() 方法用于通过在目录树种游走输出在目录中的文件名,向上或者向下. walk()方法语法格式如下: os.walk(top[, topdown=True[, onerror=None[ ...
- 精品素材:WALK & RIDE 单页网站模板下载
今天,很高兴能向大家分享一个响应式的,简约风格的 HTML5 单页网站模板.Walk & Ride 这款单页网站模板是现代风格的网页模板,简洁干净,像素完美,特别适合用于推广移动 APP 应用 ...
- 股票投资组合-前进优化方法(Walk forward optimization)
code{white-space: pre;} pre:not([class]) { background-color: white; }if (window.hljs && docu ...
- Go Walk教程 - 流程控制( switch)
Go的 switch 非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项,不要break: var score =98 var result string switch score/ ...
- [py]os.walk爬目录&sys.argv灵活获取参数
1, 遍历目录 os.walk('/tmp') os.next() 2,sys.argv ######################################## py@lanny:~/t ...
随机推荐
- Linux下Qt应用程序的发布(使用LDD命令查看所有依赖的库文件)
最近一直在学习Qt,用Qt写了一个程序,但是不知道怎么发布,网上说的都是在windows下怎么发布Qt应用程序,但是,在windows下Qt应用程序依赖的库文件与linux下的名字不同.于是,我就想到 ...
- vs2010 调试 调用堆栈 窗口
msdn 如何使用call stack窗口: http://msdn.microsoft.com/zh-cn/library/a3694ts5(v=vs.90).aspx 使用“调用堆栈”窗口可以查看 ...
- iOS 数据库第三方FMDB的简单使用
一 FMDB的简单说明及介绍 FMDB的github地址 https://github.com/ccgus/fmdb FMDB是一款简洁的,易用的封装库,简单介绍一下FMDB的使用 在FMDB下载文件 ...
- Yii Framework2.0开发教程(2)使用表单Form
第一步.接着教程(1).我们在controllers/ZhyoulunController.php中加入两处, 1) use app\models\EntryForm; 和 2) public fun ...
- Android开发之TextView排版问题
下面直接是关于解决该问题的代码(根据别人的代码进行了修正以及测试,保证可以修改字体尺寸.颜色.根据padding调整,如果需要支持其他的格式可以将对应的属性添加至Paint类型的对象中): 1 p ...
- Codeforces Round #262 (Div. 2) 460C. Present(二分)
题目链接:http://codeforces.com/problemset/problem/460/C C. Present time limit per test 2 seconds memory ...
- java反射机制入门01
java反射机制入门是我从极客学院的视频中学习的. 1.反射机制背景概述 反射(Reflection)是java被视为动态(或准动态)语言的一个关键性质.反射机制指的是程序在运行时能够获取任何类的内部 ...
- ARM流水线(pipeline)
- 一天一个类 --- StringTokenizer
这是一个将字符串按照指定的delimiters(分隔符)进行分割的类. 首先看看他的构造函数: public StringTokenizer(String str, String delim, boo ...
- USACO Ski Course Design 暴力
从Min到Max范围内暴力一下即可. /* ID: wushuai2 PROG: skidesign LANG: C++ */ //#pragma comment(linker, "/STA ...