Walk Out

                                                                        Time Limit: 2000/1000 MS (Java/Others)    Memory Limit:
65536/65536 K (Java/Others)

                                                                                               Total Submission(s): 194    Accepted Submission(s): 32

Problem Description
In an n∗m maze,
the right-bottom corner is the exit (position (n,m) is
the exit). In every position of this maze, there is either a 0 or
a 1 written
on it.



An explorer gets lost in this grid. His position now is (1,1),
and he wants to go to the exit. Since to arrive at the exit is easy for him, he wants to do something more difficult. At first, he'll write down the number on position (1,1).
Every time, he could make a move to one adjacent position (two positions are adjacent if and only if they share an edge). While walking, he will write down the number on the position he's on to the end of his number. When finished, he will get a binary number.
Please determine the minimum value of this number in binary system.
 
Input
The first line of the input is a single integer T (T=10),
indicating the number of testcases. 



For each testcase, the first line contains two integers n and m (1≤n,m≤1000).
The i-th
line of the next n lines
contains one 01 string of length m,
which represents i-th
row of the maze.
 
Output
For each testcase, print the answer in binary system. Please eliminate all the preceding 0 unless
the answer itself is 0 (in
this case, print 0 instead).
 
Sample Input
2
2 2
11
11
3 3
001
111
101
 
Sample Output
111
101
 


题目大意:
       从(1,1)到(n,m),路径形成的二进制数最大。

解题思路:
      BFS+贪心,先是bfs找到离目标近期的距离。后用贪心让最前面的尽可能为0。策略就是每往前走一步,推断是否
能够是0,方法就是找它前面离它近期的能够取0的那一位,推断能否够从那个位置走到当前的位置。

代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn=1000+100;
char s[maxn][maxn];
bool vis[maxn][maxn];
int dir[4][2]= {{1,0},{0,1},{-1,0},{0,-1}};
struct node
{
int x;
int y;
};
int ans;
int n,m;
queue<node> q;
vector<node> son[maxn*2];
void BFS1()
{
memset(vis,false,sizeof(vis));
node p;
p.x=1;
p.y=1;
ans=0;
vis[1][1]=true;
while(!q.empty())
q.pop();
if(s[1][1]=='0')
{
ans=2;
q.push(p);
}
while(!q.empty())
{
node p2;
p=q.front();
q.pop();
if(p.x==n&&p.y==m)
{
if(s[n][m]=='0')
{
ans=n+m;
vis[n][m]=true;
}
break;
}
for(int i=0; i<4; i++)
{
p2.x=p.x+dir[i][0];
p2.y=p.y+dir[i][1];
if(p2.x>0&&p2.x<=n&&p2.y>0&&p2.y<=m&&!vis[p2.x][p2.y]&&s[p2.x][p2.y]=='0')
{
vis[p2.x][p2.y]=true;
if(p2.x+p2.y>ans)
{
ans=p2.x+p2.y;
}
q.push(p2);
}
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%s",s[i]+1);
}
BFS1();
if(ans==n+m)
printf("0\n");
else
{
for(int i=0; i<=n+m; i++)
son[i].clear();
int cur=0;//记录前一位0出现的位置
if(ans==0)//起点为1
ans=1;
else
{
for(int i=1; i<=n; i++)//找到全部的离(n,m)近期的点。
{
int j=ans-i;
if(j>=1&&j<=m&&vis[i][j]&&s[i][j]=='0')
{
node v;
v.x=i;
v.y=j;
son[ans].push_back(v);
}
}
cur=ans;
}
for(int i=ans+1; i<=n+m; i++)//枚举每一步
{
if(cur==0)//前面不存在0
{
for(int j=1; j<=n; j++)
{
int k=i-j;
node v;
if(k>=1&&k<=m&&s[j][k]=='0')
{
v.x=j;
v.y=k;
son[i].push_back(v);
cur=i;
}
}
}
else
{
for(int j=1; j<=n; j++)
{
int k=i-j;
node v;
if(k>=1&&k<=m&&s[j][k]=='0')
{
for(int l=0; l<son[cur].size(); l++)
{
v=son[cur][l];
if(v.x<=j&&v.y<=k&&i-cur>=j+k-v.x-v.y)//推断前面的0是否可达
{
node w;
w.x=j;
w.y=k;
son[i].push_back(w);
break;
}
}
}
}
if(son[i].size()>0)
cur=i;
} }
for(int i=ans+1; i<=n+m; i++)
{
if(son[i].size()>0)
printf("0");
else
printf("1");
}
printf("\n");
}
}
return 0;
}


     

hdu 5335 Walk Out (2015 Multi-University Training Contest 4)的更多相关文章

  1. hdu 5335 Walk Out (搜索)

    题目链接: hdu 5335 Walk Out 题目描述: 有一个n*m由0 or 1组成的矩形,探险家要从(1,1)走到(n, m),可以向上下左右四个方向走,但是探险家就是不走寻常路,他想让他所走 ...

  2. 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 ...

  3. 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 搜索+贪心

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

  5. hdu 5335 Walk Out(bfs+寻找路径)

    Problem Description In an n∗m maze, the right-bottom corner or a written on it. An explorer gets los ...

  6. HDU 5335 Walk Out BFS 比较坑

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

  7. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...

  8. HDU 6125 - Free from square | 2017 Multi-University Training Contest 7

    思路来自这里 - - /* HDU 6125 - Free from square [ 分组,状压,DP ] | 2017 Multi-University Training Contest 7 题意 ...

  9. HDU 6129 - Just do it | 2017 Multi-University Training Contest 7

    比赛时脑子一直想着按位卷积... 按题解的思路: /* HDU 6129 - Just do it [ 规律,组合数 ] | 2017 Multi-University Training Contes ...

随机推荐

  1. JavaScript:DOM对象

    ylbtech-JavaScript:DOM对象 1. HTML DOM Document 对象返回顶部 1. HTML DOM Document 对象 HTML DOM 节点 在 HTML DOM ...

  2. Comparable与Comparator源码分析

    package java.lang; import java.util.*; /** * This interface imposes a total ordering on the objects ...

  3. BZOJ 1443 二分图博弈 网络流

    思路: 二分图博弈嘛 找到最大匹配的必须点 跑个网络流 前后DFS一遍 //By SiriusRen #include <queue> #include <cstdio> #i ...

  4. 第5章分布式系统模式 使用服务器激活对象通过 .NET Remoting 实现 Broker

    正在使用 Microsoft? .NET Framework 构建一个需要使用分布式对象的应用程序.您的要求包括能够按值或按引用来传递对象,无论这些对象驻留在同一台计算机上,还是驻留在同一个局域网 ( ...

  5. javascript 的逻辑中断(短路操作)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 修改ElementUI源码

    1.克隆ElementUI官方仓库代码到本地  https://github.com/ElemeFE/element 2.在cmd命令行安装依赖 1)找到代码文件夹 cd element 2)npm ...

  7. PowerDesigner 逆向工程 Could not Initialize JavaVM!

    原项目的大量的表,使用PowerDesigner 进行逆向工程.提示Could not Initialize JavaVM! 网上找到原因,PowerDesigner 不可以使用64位JDK环境! 有 ...

  8. RFID 知识的学习

    * 部分资料来自我们博士的PPT,部分来自网络和他人的论文. * 我们使用的教材是清华大学出版社出版的<智能卡技术(第四版)——IC卡.RFID标签与物联网(清华大学计算机系列教材)>(王 ...

  9. outlook 2010 搜索不到邮件

    打开outlook 2010 文件, 选项, 加载项, 转到 windows search eamil indexer(打勾) 关闭outlook 控制面板, 索引选项, 高级, 重建索引

  10. 工厂模式-CaffeNet训练

    参考链接:http://blog.csdn.net/lingerlanlan/article/details/32329761 RNN神经网络:http://nbviewer.ipython.org/ ...