博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【USACO 2.4】Overfencing(bfs最短路)
阅读量:7137 次
发布时间:2019-06-28

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

H行W列的迷宫,用2*H+1行的字符串表示,每行最多有2*W+1个字符,省略每行后面的空格。迷宫的边界上有且仅有两个出口,求每个点出发到出口的最短路。

+-+-+-+-+-+|         |+-+ +-+ + +|     | | |+ +-+-+ + +| |     |+-+ +-+-+-+

以每个出口为起点bfs,需要注意的是,最后的距离是(d+1)/2。

/*TASK:maze1URL:http://train.usaco.org/usacoprob2?a=iHr5iXglQfJ&S=maze1LANG:C++*/#include
#include
#include
#include
#define N 305using namespace std;int n,m,dx[5]={
0,1,0,-1},dy[5]={
1,0,-1,0},dis[N][N],ans,vis[N][N];char c[N][N];struct node { int x,y,d;};queue
q;void bfs(){ for(int i=0;i<=2*m;i++) for(int j=0;j<=2*n;j++) if(!i||i==2*m||!j||j==2*n) if(!c[i][j]||c[i][j]==' '){ memset(vis,0,sizeof vis); q.push((node){i,j,0}); while(!q.empty()){ node t=q.front(); q.pop(); int x=t.x,y=t.y,d=t.d; if(vis[x][y]||x<0||y<0||x>2*m+1||y>2*n+1||c[x][y]&&c[x][y]!=' ')continue; vis[x][y]=1; dis[x][y]=min(dis[x][y],d); for(int i=0;i<=4;i++) q.push((node){x+dx[i],y+dy[i],d+1}); } }}int main(){ freopen("maze1.in","r",stdin); freopen("maze1.out","w",stdout); scanf("%d%d",&n,&m); for(int i=0;i<=m*2;i++) scanf("%*c%[^\n]",c[i]); memset(dis,0x3f3f3f3f,sizeof dis); bfs(); for(int i=1;i<=2*m;i+=2) for(int j=1;j<=2*n;j+=2) ans=max(ans,dis[i][j]); printf("%d\n",ans+1>>1); return 0;}

 

  

转载地址:http://gpvrl.baihongyu.com/

你可能感兴趣的文章
使用GDB调试gp(转载)
查看>>
用Python给你的博客加上水印
查看>>
线性微分方程与常数变异法
查看>>
选夫婿1 结构体
查看>>
最少硬币数目的问题
查看>>
算法之折半查找
查看>>
webpack实用小功能介绍
查看>>
OpenStack high-level Functionsenabled
查看>>
深入理解Linux内核-内核同步
查看>>
zabbix实现mysql数据库的监控(三)
查看>>
外观模式-多了个办事处
查看>>
laravel 文件上传
查看>>
《寻路算法第二篇》A*寻路的路径平滑、静态合并、生成格子工具自动化、
查看>>
求职防骗指南
查看>>
23命令模式Command
查看>>
Cortex系列M0-4简单对比
查看>>
相对定位
查看>>
JAVASCRIPT 类型转换
查看>>
MongoDB入门上
查看>>
B进制星球
查看>>