题目链接:http://poj.org/problem?id=2049

解题报告:

网格中的BFS,最主要的是边界问题。

1、这里在左右,上下两个方向上,分别判断墙,和门,细节是,向上有t个墙,for(int j=0;j<t;j++) ya[x][y+1+j]=WALL;   ymax=max(y+t+1,ymax);xmax=max(x+1,xmax);

2、这里采用的是逆向BFS,从dis[1][1]出发,输出dis[tx][ty];

#include <iostream>
#include <queue>
#include <stdio.h>
#include <string.h> using namespace std; #define MAXV 210
#define INF 1<<29
#define min(a,b) (a>b?b:a)
#define max(a,b) (a>b?a:b) #define EMPTY 0
#define DOOR 1
#define WALL INF int xa[MAXV][MAXV]; ///在x方向上添上墙
int ya[MAXV][MAXV]; ///在y方向上添上墙 int dis[MAXV][MAXV]; ///目标答案,dis[i][j]先初始化为无穷,然后置dis[1][1]为0,
///根据x,y方向上的是否有墙,自增,没有墙置+0,有门+1,dis[tx][ty]也就是答案 int dt[][]= {{-,},{,},{,-},{,}}; ///四个方向分别是向上,向下,向左,向右 int xmax,ymax; ///x,y方向上的边界 ///判断是否在图表中
bool pd(int x,int y)
{
if(x> && x<=xmax && y<=ymax && y>) return ;
return ;
} int getvalue(int x,int y,int i)
{
if(i==) return ya[x-][y];
if(i==) return ya[x][y];
if(i==) return xa[x][y-];
return xa[x][y];
} ///逆向广搜
int bfs(int tx,int ty)
{
int i,j,vx,vy,dx,dy,tmp;
queue <int>q; ///初始化
for(i=; i<=ymax; i++)
{
for(j=; j<=xmax; j++)
dis[i][j]=INF;
} dis[][]=;
q.push();
q.push();
while(!q.empty())
{
vx=q.front();
q.pop();
vy=q.front();
q.pop(); for(i=; i<; i++)
{
dx=vx+dt[i][];
dy=vy+dt[i][]; tmp=getvalue(vx,vy,i); ///tmp为这个格子是否为墙,门,什么都没有,分别对应inf,1,0
if(pd(dx,dy) && dis[dx][dy]>dis[vx][vy]+tmp)
{
dis[dx][dy]=dis[vx][vy]+tmp;
q.push(dx);
q.push(dy);
}
}
}
return (dis[tx][ty]==INF?-:dis[tx][ty]);
} int main()
{
int n,m,i,j;
int x,y,d,t;
double sx,sy;
while(scanf("%d%d",&m,&n))
{
///m个墙,n个门
if(m==- && n==-) break; ymax=xmax=-;
memset(xa,EMPTY,sizeof(xa));
memset(ya,EMPTY,sizeof(ya));
for(i=; i<m; i++)
{
scanf("%d%d%d%d",&x,&y,&d,&t);
if(d) ///向上有墙
{
for(j=; j<t; j++)
ya[x][y+j+]=WALL;
ymax=max(y+t+,ymax);
xmax=max(x+,xmax);
}
else
{
for(j=; j<t; j++)
xa[x+j+][y]=WALL;
ymax=max(y+,ymax);
xmax=max(x+t+,xmax);
}
} for(i=; i<n; i++)
{
scanf("%d%d%d",&x,&y,&d);
if(d) ya[x][y+]=DOOR;
else xa[x+][y]=DOOR;
} scanf("%lf%lf",&sx,&sy);
if(!(sx>= && sx<= && sy>= && sy<=)) printf("0\n");
else printf("%d\n",bfs((int)sx+,(int)sy+));
}
return ;
}

参考:http://blog.csdn.net/wangjian8006/article/details/7997609

网格中的BFS,逆向(POJ2049)的更多相关文章

  1. 搜索(BFS)---计算在网格中从原点到特定点的最短路径长度

    计算在网格中从原点到特定点的最短路径长度 [[1,1,0,1], [1,0,1,0], [1,1,1,1], [1,0,1,1]] 题目描述: 1表示可以经过某个地方,求解从(0,0)位置到(tr,t ...

  2. VMware 设备VMnet0 上的网桥暂时关闭。此虚拟机无法与主机或网格中的其他计算机通信【转】

    今天克隆了一个win7的虚拟机,移动到我的本地.打开时发现虚拟机网格连接图标出现X断开连接,于是网上收了一堆答案无一个可用的,决定自己解决这个问题,解决过程如下: 1.报错图如下:设备VMnet0 上 ...

  3. csuoj 1117: 网格中的三角形

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1117 1117: 网格中的三角形 Time Limit: 3 Sec  Memory Limit: ...

  4. eclipse中使用mybatis-generator逆向代码生成工具问题解决记录

    问题一: eclipse中使用mybatis-generator逆向代码生成工具出现waiting for "building  workspace" 解决办法: 选择菜单栏的   ...

  5. P2295 MICE 网格中的DP

    题目描述 分析 很好的一道网格中的\(DP\)题 我们设\(f[x][y]\)为小象到达坐标为\((x,y)\)的点时看到的最少的老鼠的数量 但是这样定义是不好转移的,因为小象可能从上面的格子转移下来 ...

  6. sigma网格中水平压力梯度误差及其修正

    1.水平梯度误差产生 sigma坐标系下,笛卡尔坐标内水平梯度项对应形式为 \[\begin{equation} \left. \frac{\partial }{\partial x} \right| ...

  7. Istio(十一):向istio服务网格中引入虚拟机

    目录 一.模块概览 二.系统环境 三.虚拟机负载 3.1 虚拟机负载 3.2 单网络架构 3.3 多网络架构 3.4 Istio 中如何表示虚拟机工作负载? 四.实战:向istio Mesh中引入虚拟 ...

  8. n行m列的网格中含有的矩形数

    给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形 公式:[ n(n+1)*m(m+1)]/4 直接想问题比较复杂,可以先考虑矩形的长,再考虑矩形的高,由对称性可知最后的结果中m和n对称 ...

  9. (3)PyCharm中Flask工程逆向生成数据库表

    一.创建数据库 在mysql数据库中创建名为"movie"的数据库. 二.安装SQLAlchemy 三.安装PyMySQL 四.创建数据模型 在app/models.py中编写数据 ...

随机推荐

  1. Windows无法启动 VMware Workstation server服务解决方法

    Windows无法启动VMware Workstation server服务, 可以通过删除datastores.xml文件来解决. 具体操作步骤如下: 1.在系统盘目录下,找到C:\ProgramD ...

  2. my13_mysql xtrabackup备份的时间点

    备份原理 xtrabackup的备份时间点是备份结束时刻,记录在xtrabackup_binlog_info 文件中:如果后续需要通过binlog追加操作,则该时间点是起点. 备份开始后,xtrabc ...

  3. java——int、args[]传参、标签、数字塔?、一个输入格式

    1.当int型整数超出自己范围时,会从它的上界重新开始. public class exp { public static void main(String[] args) { int i = 214 ...

  4. Python3 PIL Image 操作文件后导致占用问题

    需求:按图片分辨率范围分类图片(每个商品有N张图片在一个目录内). 实现:用PIL Image打开图片并读取宽度和高度.然后按不同分辨率存档到不同目录. 问题:从原有目录移动到目标目录时出现 “Per ...

  5. C# 利用ITextSharp导出PDF文件

    最近项目中需要导出PDF文件,最后上网搜索了一下,发现ITextSharp比较好用,所以做了一个例子: public string ExportPDF() { //ITextSharp Usage / ...

  6. 20181031 temp

    https://wiki.jenkins.io/display/JENKINS/M2+Release+Plugin https://issues.jenkins-ci.org/browse/JENKI ...

  7. c语言中的隐式函数声明(转)

    本文转自:http://www.jb51.net/article/78212.htm 在c语言里面开来还是要学习c++的编程习惯,使用函数之前一定要声明.不然,即使编译能通过,运行时也可能会出一些莫名 ...

  8. vsftpd配置文件详解 ---配置解说

    vsftpd配置文件详解     1.默认配置: 1>允许匿名用户和本地用户登陆.      anonymous_enable=YES      local_enable=YES 2>匿名 ...

  9. js跳转到邮箱登录

    做邮箱验证时为了用户体验,往往会有跳转到邮箱登录这一按钮,其中的js如下: $("#btnemail").click(function () { var userEmail = $ ...

  10. 2019.3.26判断是否回文(java实现)

    我所有的文章都是对我总结学习的总结,那里不好或者冒犯了那里,我先对您说声对不起,请告知我进行改正. 今天java老师作业题目是判断是一个字符串否是回文: emmmm,我的思路是将字符串逆序,然后使用方 ...