博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网格中的BFS,逆向(POJ2049)
阅读量:5984 次
发布时间:2019-06-20

本文共 2260 字,大约阅读时间需要 7 分钟。

题目链接:

解题报告:

网格中的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 
#include
#include
#include
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 INFint 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[4][2]= {
{-1,0},{
1,0},{
0,-1},{
0,1}}; ///四个方向分别是向上,向下,向左,向右int xmax,ymax; ///x,y方向上的边界///判断是否在图表中bool pd(int x,int y){ if(x>0 && x<=xmax && y<=ymax && y>0) return 1; return 0;}int getvalue(int x,int y,int i){ if(i==0) return ya[x-1][y]; if(i==1) return ya[x][y]; if(i==2) return xa[x][y-1]; return xa[x][y];}///逆向广搜int bfs(int tx,int ty){ int i,j,vx,vy,dx,dy,tmp; queue
q; ///初始化 for(i=1; i<=ymax; i++) { for(j=1; j<=xmax; j++) dis[i][j]=INF; } dis[1][1]=0; q.push(1); q.push(1); while(!q.empty()) { vx=q.front(); q.pop(); vy=q.front(); q.pop(); for(i=0; i<4; i++) { dx=vx+dt[i][0]; dy=vy+dt[i][1]; 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?-1: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==-1 && n==-1) break; ymax=xmax=-1; memset(xa,EMPTY,sizeof(xa)); memset(ya,EMPTY,sizeof(ya)); for(i=0; i
=1 && sx<=199 && sy>=1 && sy<=199)) printf("0\n"); else printf("%d\n",bfs((int)sx+1,(int)sy+1)); } return 0;}
View Code

参考:

转载于:https://www.cnblogs.com/TreeDream/p/5392655.html

你可能感兴趣的文章
一个ECS上自建Oracle数据库的案例的相关实践
查看>>
调整vmware虚拟机硬盘空间大小
查看>>
yum使用之小练习
查看>>
杀死linux的僵尸进程
查看>>
scrapy随机更改User-Agent方法
查看>>
最近蹿红的(伪)自动驾驶土豆,是怎么做出来的?
查看>>
我的 PHP Zend Framework(ZF) 框架教程连载
查看>>
【原理总结】STP生成树机制
查看>>
双击IE7会生成快捷方式的处理
查看>>
i7 cpu 以及计算机系统赏析
查看>>
svnserve.conf:12: Option expected的问题解决方法
查看>>
多种思路解决Keepalived限制死20个VIP问题
查看>>
实现DUA设备更新代理的相关资源
查看>>
第一个shell
查看>>
allot管理口无法通讯
查看>>
NFS服务器配置
查看>>
Nginx + webpy 和FastCGI搭建webpy环境
查看>>
Filter滤镜
查看>>
GRE over IPSEC 同时NAT-T(Profile PAT)
查看>>
Windows Phone 7 框架和页面
查看>>