别走泥坑。

暑期集训的一天下了大雨,地面出现了许多泥坑,一踩一脚泥。小tao从坐标平面上的点(0,0)出发,准备去向文瀛餐厅(X , Y)(-500≤ X , Y≤ 500)。在路上有N(1≤ N≤ 10000)个泥坑,位于点(Ai,Bi)(-500≤ Ai , Bi≤500)。

小tao为了好好集训,买了一双新鞋子来鼓舞自己,他不想弄脏鞋子,但他也想尽快到达餐厅干饭。如果小tao只能平行于轴线移动,并在整数坐标点转向,请问他到达餐厅且保持鞋子干净要走的最小距离是多少?

保证总是有一条没有泥的路使得小tao可以走到餐厅。

输入描述

第1行:三个空间分隔的整数:X、Y和N。  表示餐厅坐标以及泥坑的数量。

第2..N+1行:第i+1行包含两个空格分隔的整数:Ai和Bi。 表示每个泥坑的坐标。

输出描述

输出小tao在不踩泥的情况下到达文瀛餐厅所需的最小距离。

样例输入

1 2 7
0 2
4 2
3 1
1 1
2 2
-1 1
-1 3

样例输出

11

题解:

使用bfs:

判断正在搜索的点的上下左右四个方向的点是否符合要求,即 在图的范围中,且不是泥地,且没有被搜索过(让每个点的距离为第一次搜索到的距离,即可使其对应的距离最小),如果符合要求,即这个点的距离为正在搜索的点的距离加1,再将这个点放入队列中。

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int a,b,n;
int g[N][N];
typedef pair<int,int> PII;
int d[N][N];
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};//上下左右四个方向 
int bfs()
{
	queue<PII> q;//队列,宽度优先搜索,使得距离原点距离为1,2,3,4。。。的点依次搜索 
	memset(d,-1,sizeof d);
	d[500][500]=0;
	q.push({500,500});
	while(q.size())
	{
		PII t=q.front();//找出队列头节点,即为此次要搜索的点 
		q.pop();//将此点从队列中移除 
//		for(int i=0;i<4;i++)/四个方向依次尝试 
		{
			int x=t.first+dx[i],y=t.second+dy[i];
			if(x>=0&&x<=1000&&y>=0&&y<=1000&&g[x][y]==0&&d[x][y]==-1)//此点不超出图的范围,且不是泥点,且没被搜索过,即此点的距离为搜索点+1 
			{
				d[x][y]=d[t.first][t.second]+1;
				q.push({x,y});//将符合要求的点放入队列中 
			}
		}
	}
	return d[500+a][500+b];
}
int main()
{
	cin>>a>>b>>n;
	while(n--)
	{
		int a1,b1;
		cin>>a1>>b1;
		g[a1+500][b1+500]=1;
	}
	cout<<bfs()<<endl;
	return 0;
}

好的,请稍等片刻,我来为您展示一下Python turtle画佩奇与乔治踩泥坑的代码: ```python import turtle # 画佩奇 peppa = turtle.Turtle() peppa.penup() peppa.goto(-75, 0) peppa.pendown() peppa.pensize(5) peppa.color('#f68d99') peppa.speed(10) peppa.circle(70) peppa.penup() peppa.goto(-40, 60) peppa.pendown() peppa.color('#ffffff') peppa.begin_fill() peppa.circle(15) peppa.end_fill() peppa.penup() peppa.goto(10, 60) peppa.pendown() peppa.color('#ffffff') peppa.begin_fill() peppa.circle(15) peppa.end_fill() peppa.penup() peppa.goto(-4, 45) peppa.pendown() peppa.color('#000000') peppa.begin_fill() peppa.circle(5) peppa.end_fill() peppa.penup() peppa.goto(54, 60) peppa.pendown() peppa.color('#ffffff') peppa.begin_fill() peppa.circle(15) peppa.end_fill() peppa.penup() peppa.goto(60, 45) peppa.pendown() peppa.color('#000000') peppa.begin_fill() peppa.circle(5) peppa.end_fill() # 添加佩奇的手臂 peppa.penup() peppa.goto(-75, 20) peppa.pendown() peppa.pensize(12) peppa.right(45) peppa.forward(50) peppa.penup() peppa.goto(-75, -5) peppa.pendown() peppa.right(45) peppa.forward(50) # 添加佩奇的鼻子 peppa.penup() peppa.goto(-20, 10) peppa.pendown() peppa.pencolor('#f68d99') peppa.fillcolor('#f68d99') peppa.begin_fill() peppa.left(45) peppa.forward(20) peppa.right(135) peppa.forward(20) peppa.right(135) peppa.forward(20) peppa.end_fill() # 画乔治 george = turtle.Turtle() george.penup() george.goto(75, 0) george.pendown() george.pensize(5) george.color('#ffe4b5') george.speed(10) george.circle(70) george.penup() george.goto(40, 60) george.pendown() george.color('#ffffff') george.begin_fill() george.circle(15) george.end_fill() george.penup() george.goto(-10, 60) george.pendown() george.color('#ffffff') george.begin_fill() george.circle(15) george.end_fill() george.penup() george.goto(6, 45) george.pendown() george.color('#000000') george.begin_fill() george.circle(5) george.end_fill() george.penup() george.goto(-44, 60) george.pendown() george.color('#ffffff') george.begin_fill() george.circle(15) george.end_fill() george.penup() george.goto(-50, 45) george.pendown() george.color('#000000') george.begin_fill() george.circle(5) george.end_fill() # 添加乔治的手臂 george.penup() george.goto(75, 20) george.pendown() george.pensize(12) george.left(45) george.forward(50) george.penup() george.goto(75, -5) george.pendown() george.left(45) george.forward(50) # 添加乔治的尾巴 george.penup() george.goto(-30, -40) george.pendown() george.pencolor('#ffe4b5') george.fillcolor('#ffe4b5') george.begin_fill() george.right(45) george.forward(40) george.right(90) george.forward(20) george.right(90) george.forward(10) george.right(90) george.forward(20) george.right(45) george.forward(20) george.end_fill() # 踩泥坑 stamp_size = 20 turtle.penup() turtle.color("brown") turtle.goto(-150, -150) for i in range(20): turtle.stamp() turtle.forward(stamp_size) turtle.penup() turtle.color("green") turtle.goto(-150, -130) for i in range(20): turtle.stamp() turtle.forward(stamp_size) turtle.penup() turtle.color("brown") turtle.goto(-150, -110) for i in range(20): turtle.stamp() turtle.forward(stamp_size) turtle.penup() turtle.color("green") turtle.goto(-150, -90) for i in range(20): turtle.stamp() turtle.forward(stamp_size) turtle.penup() turtle.color("brown") turtle.goto(-150, -70) for i in range(20): turtle.stamp() turtle.forward(stamp_size) turtle.penup() turtle.color("green") turtle.goto(-150, -50) for i in range(20): turtle.stamp() turtle.forward(stamp_size) turtle.done() ``` 可以通过运行以上代码在画布上绘制出佩奇和乔治,以及他们在泥坑中踩踏的痕迹。希望这可以回答您的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值