博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
牛客假日团队赛6 F. Mud Puddles
阅读量:4557 次
发布时间:2019-06-08

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

F. Mud Puddles

题目链接:

题目:

农夫约翰早上6点离开家,每天挤奶贝西。然而,前一天晚上看到一场大雨,田野非常泥泞。 FJ从坐标平面中的点(0,0)开始,朝向位于(X,Y)的Bessie(-500≤X≤500;-500≤Y≤500)。他可以看到所有N(1≤N≤10,000)泥浆的水坑,位于油田的点(Ai,Bi)(-500≤Ai≤500;-500≤Bi≤500)。每个水坑只占据它所在的点。
刚刚买了新靴子,Farmer John绝对不想踩到水坑弄脏他们,但他也希望尽快到达Bessie。他已经迟到了,因为他不得不算上所有的水坑。如果Farmer John只能平行于轴行进并转向带有整数坐标的点,那么他必须前往Bessie并保持靴子清洁的最短距离是多少? Farmer John可以带着一条没有泥浆的路径到达Bessie。
输入描述:
*第1行:三个空格分隔的整数:X,Y和N.
*行2..N 1:行i 1包含两个空格分隔的整数:Ai和Bi
输出描述:
*第1行:Farmer John必须前往Bessie而不踩泥的最小距离。

思路:BFS宽搜,稍微变化一下,由于坐标存在负值将起始点变为(500,500)

越界条件变为<0||>1000,终点变为X+500,Y+500,将1000*1000的矩阵初始化为0,然后有泥坑的地方赋值为1,搜索时遇到1就不走,代码如下:

 

//// Created by hy on 2019/7/13.//#include
using namespace std;typedef long long ll;const int maxn=1005;int zou[maxn][maxn];bool is[maxn][maxn];struct node{ int x; int y; int dept;};int x,y;int dic[4][2]={
{-1,0},{
0,1},{
1,0},{
0,-1}};int bfs(){ queue
qu; node now,next; now.x=500; now.y=500; now.dept=0; is[500][500]=1; qu.push(now); while(!qu.empty()) { now=qu.front(); qu.pop(); if(now.x==x+500&&now.y==y+500) return now.dept; for(int i=0;i<4;i++) { int xx=now.x+dic[i][0]; int yy=now.y+dic[i][1]; if(xx<0||xx>1000||yy<0||yy>1000) continue; if(zou[xx][yy]==0&&!is[xx][yy]) { is[xx][yy]=1; next.x=xx; next.y=yy; next.dept=now.dept+1; qu.push(next); } } } return 0;}int main(){ int n; cin>>x>>y>>n; memset(is,0,sizeof(is)); memset(zou,0,sizeof(zou)); int p,q; for(int i=0;i
>p>>q; zou[p+500][q+500]=1; } cout<
<

 

转载于:https://www.cnblogs.com/Vampire6/p/11187759.html

你可能感兴趣的文章
23种设计模式中的命令模式
查看>>
[转载]年薪10w和年薪100w的人,差在哪里?
查看>>
shell 日期参数
查看>>
package的使用
查看>>
括号生成
查看>>
前端--jstree--异步加载数据
查看>>
CSS定位深入理解 完全掌握CSS定位 相对定位和绝对定位
查看>>
网络体系结构
查看>>
练习4.13、4.14、4.15、4.16
查看>>
SAP库龄表
查看>>
PhantomJS 基础及示例 (转)
查看>>
20175316盛茂淞 2018-2019-2 《Java程序设计》第3周学习总结
查看>>
zookeeper安装
查看>>
js清空页面控件值
查看>>
Appium使用Python运行appium测试的实例
查看>>
django request bug
查看>>
二叉树_非递归先中后序_递归非递归求深度
查看>>
20181227 新的目标
查看>>
HDFS写流程
查看>>
生产环境服务器环境搭建+ 项目发布
查看>>