poj 3501 Escape from Enemy Territory 二分+bfs
水题,不解释。
#include<stdio.h>
#include<math.h>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 1000002
struct node
{
int x,y;
int dis;
}base[10005],st,end;
int n,m;
int maps[1005][1005];
bool vis[1005][1005];
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
struct que
{
struct node t[N];
int head,tail;
void init()
{
head = tail = 0;
}
bool empty()
{
return head == tail;
}
struct node top()
{
return t[head];
}
void push(struct node a)
{
t[tail] = a;
tail ++;
if(tail >= N)
tail -= N;
}
void pop()
{
head ++;
if(head >= N)
head -= N;
}
}q;
int maxn;
int leng;
bool isok(int x,int y)
{
return x>=0&&x<n&&y>=0&&y<m;
}
void debug_map()
{
for(int i=0;i<n;i++,puts(""))
for(int j=0;j<m;j++)
printf("%3d",maps[i][j]);
}
void bfs()
{
node tt,tmp;
while(!q.empty())
{
tmp=q.top();
for(int d=0;d<4;d++)
{
tt.x=tmp.x+dx[d];
tt.y=tmp.y+dy[d];
tt.dis=tmp.dis+1;
if(isok(tt.x,tt.y)&&maps[tt.x][tt.y]==-1)
{
maps[tt.x][tt.y]=tt.dis;
maxn=max(maxn,tt.dis);
q.push(tt);
}
}
q.pop();
}
}
bool cal(int lim)
{
if(maps[st.x][st.y]<lim) return false;
q.init();
q.push(st);
node tmp,tt;
for(int i=0;i<=n;i++)
memset(vis[i],false,sizeof(bool)*(m+1)); while(!q.empty())
{
tmp=q.top();
for(int d=0;d<4;d++)
{
tt.x=tmp.x+dx[d];
tt.y=tmp.y+dy[d];
tt.dis=tmp.dis+1;
if(isok(tt.x,tt.y)&&maps[tt.x][tt.y]>=lim&&!vis[tt.x][tt.y])
{
vis[tt.x][tt.y]=true;
if(tt.x==end.x&&tt.y==end.y)
{
leng=tt.dis;
return true;
}
q.push(tt);
}
}
q.pop();
}
return false;
}
int main()
{
int cas;
scanf("%d",&cas);
st.dis=0;
int tt;
while(cas--)
{
q.init();
maxn=0;
scanf("%d%d%d",&tt,&n,&m);
scanf("%d%d%d%d",&st.x,&st.y,&end.x,&end.y); for(int i=0;i<n;i++)
memset(maps[i],-1,sizeof(int)*(m+1));
node t;t.dis=0;
for(int i=0;i<tt;i++)
{
scanf("%d%d",&base[i].x,&base[i].y);
maps[base[i].x][base[i].y]=0; t.x=base[i].x;
t.y=base[i].y; q.push(t);
}
bfs();
int l=0,r=n+m;
int mid;
int ans=0;
while(l<=r)
{
mid=(l+r)/2;
if(cal(mid)) {ans=mid;l=mid+1;}
else r=mid-1;
}
printf("%d %d\n",ans,leng);
}
return 0;
}
/*
3 3 3
0 0 2
1 0
1 1
1 2
*/
poj 3501 Escape from Enemy Territory 二分+bfs的更多相关文章
- poj 3501 Escape from Enemy Territory 预处理+二分+bfs
传送门 给一个起点一个终点, 给出整个地图的宽和高, 给出n个敌人的坐标. 让你找到一条路径, 这条路径上的点距离所有敌人的距离都最短, 输出最短距离. 首先预处理出来地图上的所有点到敌人的最短距离, ...
- hdu 2337 Escape from Enemy Territory
题目大意 给你一张nn*mm矩形地图.上面有些点上有敌营.给你起点和终点, 你找出一条最优路径.满足最优路径上的点离敌营的最近最短距离是所有路径最短的.若有多条找路径最短的一条. 分析 通过二分来确定 ...
- POJ 1475 Pushing Boxes 搜索- 两重BFS
题目地址: http://poj.org/problem?id=1475 两重BFS就行了,第一重是搜索箱子,第二重搜索人能不能到达推箱子的地方. AC代码: #include <iostrea ...
- poj 3111 K Best 最大化平均值 二分思想
poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...
- hdu 5652 India and China Origins(二分+bfs || 并查集)BestCoder Round #77 (div.2)
题意: 给一个n*m的矩阵作为地图,0为通路,1为阻碍.只能向上下左右四个方向走.每一年会在一个通路上长出一个阻碍,求第几年最上面一行与最下面一行会被隔开. 输入: 首行一个整数t,表示共有t组数据. ...
- hdu-5652 India and China Origins(二分+bfs判断连通)
题目链接: India and China Origins Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K ...
- POJ 2110 Mountain Walking 二分+bfs
传送门 昨天看到这个题还以为是个脑残的dp, 然而脑残的是我. 题目意思就是从左上角走到右下角, 设x为路径上的最大值-最小值, 求x的最小值. 二分x, 对于每一个x, 枚举下界lower, low ...
- POJ 2289 Jamie's Contact Groups (二分+最大流)
题目大意: 有n个人,可以分成m个组,现在给出你每个人可以去的组的编号,求分成的m组中人数最多的组最少可以有多少人. 算法讨论: 首先喷一下这题的输入,太恶心了. 然后说算法:最多的最少,二分的字眼. ...
- POJ 2251 Dungeon Master(3D迷宫 bfs)
传送门 Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 28416 Accepted: 11 ...
随机推荐
- UVA 408 Uniform Generator 伪随机数(水)
题意:根据这个式子来递推求得每个随机数x,step和mod给定,seed(0)=0.如果推出来的序列是mod个不重复的数字(0~mod-1)则打印good,否则bad(因为不能产生所有的数). 思路: ...
- Java [Leetcode 260]Single Number III
题目描述: Given an array of numbers nums, in which exactly two elements appear only once and all the oth ...
- 用C/C++开发基于VLC SDK的视频播放器
在windows系统如果开发万能播放器,一般都是基本DirectShow来开发,开发也很简单,但缺点也很多,一个文件格式是否能够播放完全取决于你 是否安装了正确的解析器和解码器,即使现在有了万能解器安 ...
- 【转】VS2012编译出来的程序,在XP上运行,出现“.exe 不是有效的 win32 应用程序” “not a valid win32 application”
原文网址:http://www.cnblogs.com/Dageking/archive/2013/05/15/3079394.html VS2012编译出来的程序,在XP上运行,出现“.exe 不是 ...
- 【转】android Apk打包过程概述_android是如何打包apk的
最近看了老罗分析android资源管理和apk打包流程的博客,参考其他一些资料,做了一下整理,脱离繁琐的打包细节和数据结构,从整体上概述了apk打包的整个流程. 流程概述: 1.打包资源文件,生成 ...
- Windows Sockets Error Codes
https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx Most Windows Sockets ...
- [译]LINT TO SQL 介绍(数据库查询) - Part.3
出处:Linq To Sql (Part.3 – Querying our database) 术语表 Built-in:内置的 Clause:子句 Debugger:调试器 Object Relat ...
- NumberSeekBar 可任意拖动和自动
package com.example.numberseekbar; import android.content.Context; import android.content.res.Resour ...
- Corn Fields(POJ 3254状压dp)
题意: n*m网格1能放0不能放 放的格子不能相邻 求一共多少种可放的方案. 分析: dp[i][j]第i行可行状态j的的最大方案数,枚举当前行和前一行的所有状态转移就行了(不放牛也算一种情况) #i ...
- <转>Python 参数知识(变量前加星号的意义)
csdn上的牛人就是多,加油 —————————————————————————— 过量的参数 在运行时知道一个函数有什么参数,通常是不可能的.另一个情况是一个函数能操作很多对象.更有甚者,调用自身的 ...