[USACO07DEC]Mud Puddles S

[USACO07DEC]Mud Puddles S

题目描述

Farmer John is leaving his house promptly at 6 AM for his daily milking of Bessie. However, the previous evening saw a heavy rain, and the fields are quite muddy. FJ starts at the point (0, 0) in the coordinate plane and heads toward Bessie who is located at (X, Y) (-500 ≤ X ≤ 500; -500 ≤ Y ≤ 500). He can see all N (1 ≤ N ≤ 10,000) puddles of mud, located at points (Ai, Bi) (-500 ≤ Ai ≤ 500; -500 ≤ Bi ≤ 500) on the field. Each puddle occupies only the point it is on.

Having just bought new boots, Farmer John absolutely does not want to dirty them by stepping in a puddle, but he also wants to get to Bessie as quickly as possible. He's already late because he had to count all the puddles. If Farmer John can only travel parallel to the axes and turn at points with integer coordinates, what is the shortest distance he must travel to reach Bessie and keep his boots clean? There will always be a path without mud that Farmer John can take to reach Bessie.

清早6:00,Farmer John就离开了他的屋子,开始了他的例行工作:为贝茜挤奶。前一天晚上,整个农场刚经受过一场瓢泼大雨的洗礼,于是不难想见,FJ 现在面对的是一大片泥泞的土地。FJ的屋子在平面坐标\((0, 0)\)的位置,贝茜所在的牛棚则位于坐标\((X,Y)\) \((-500 <= X <= 500; -500 <= Y <= 500)\)处。当然咯, FJ也看到了地上的所有N(1 <= N <= 10,000)个泥塘,第i个泥塘的坐标为 \((A\_i, B\_i)\) \((-500 <= A\_i <= 500;-500 <= B\_i <= 500)\)。每个泥塘都只占据了它所在的那个格子。 Farmer John自然不愿意弄脏他新买的靴子,但他同时想尽快到达贝茜所在的位置。为了数那些讨厌的泥塘,他已经耽搁了一些时间了。如果Farmer John 只能平行于坐标轴移动,并且只在x、y均为整数的坐标处转弯,那么他从屋子门口出发,最少要走多少路才能到贝茜所在的牛棚呢?你可以认为从FJ的屋子到牛棚总是存在至少一条不经过任何泥塘的路径。

输入格式

* Line 1: Three space-separate integers: X, Y, and N.

第1行: 3个用空格隔开的整数:X,Y 和 N

* Lines 2..N+1: Line i+1 contains two space-separated integers: Ai and Bi

第2..N+1行: 第i+1行为2个用空格隔开的整数:A_i 和 B_i

输出格式

* Line 1: The minimum distance that Farmer John has to travel to reach Bessie without stepping in mud.

第1行: 输出1个整数,即FJ在不踏进泥塘的情况下,到达贝茜所在牛棚所需要 走过的最小距离

样例

样例输入

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

样例输出

11



代码

#include <bits/stdc++.h>
using namespace std;
struct Node{
	int x,y,dis;
};
queue<Node> q;
bool m[1001][1001];
int x,y,n;
const int dx[4]={-1,0,1,0};
const int dy[4]={0,1,0,-1};
bool f(int x,int y)
{
	return x<-500||x>500||y<-500||y>500||m[x+500][y+500];
}
void bfs()
{
	q.push({0,0,0});
	while(!q.empty())
	{
		int nx=q.front().x,ny=q.front().y,val=q.front().dis;
		q.pop();
		if(f(nx,ny)) continue;
		m[nx+500][ny+500]=1;
		if(nx==x&&ny==y)
		{
			cout << val << endl;
			return;
		}
		for(int i=0;i<4;i++)
		{
			q.push({nx+dx[i],ny+dy[i],val+1});
		}
	}
}
int main()
{
	cin >> x >> y >> n;
	while(n--)
	{
		int X,Y;
		cin >> X >> Y;
		m[X+500][Y+500]=1;
	}
	bfs();
	return 0;
}

原文链接:https://www.cnblogs.com/momotrace/p/p2873.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:[USACO07DEC]Mud Puddles S - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月27日

相关文章

  • C语言关键字auto与register的深入理解

    C语言关键字auto与register的深入理解 1. 什么是关键字auto? auto是C语言中的一个关键字,表示自动变量。在程序中定义变量时如果没有显式地指定变量的存储类别,那么变量的存储类别默认为auto。具有auto存储类别的变量只能在定义它的块内(也就是作用域)使用,一旦离开这个作用域,变量就会被自动销毁。 例如,下面的代码中,变量a定义为自动变量…

    C 2023年5月23日
    00
  • java 如何查看jar包加载顺序

    要查看Java程序中jar包的加载顺序,可以采用以下两种方法: 方法一:通过JVM参数获取加载路径1. 打开命令行窗口,进入程序的启动目录2. 输入以下命令,并在其中添加 -verbose:class JVM参数 java -verbose:class -jar yourApplication.jar 启动程序,等程序启动完成后便可看到输出结果,其中就包含了…

    C 2023年5月23日
    00
  • Python读写Json涉及到中文的处理方法

    当Python处理JSON数据时,如果涉及到中文,需要注意字符编码问题。以下是Python读写JSON涉及到中文的处理方法攻略: 1. 读取中文JSON数据 在读取JSON数据中出现中文时,需要设置正确的字符串编码。可以使用Python自带的json模块,其loads()函数可以将JSON字符串转换为Python字典,并指定UTF-8编码格式,如下所示: i…

    C 2023年5月23日
    00
  • C语言详解如何应用模拟字符串和内存函数

    C语言是一门广泛应用于系统编程和算法实现的编程语言。其中,模拟字符串和内存函数常常被用于字符串和数据处理。本攻略将详细讲解如何在C语言中实现模拟字符串和内存函数,以及如何应用它们解决实际问题。 一、字符串的模拟 1.1. 什么是字符串 在C语言中,字符串是一个由字符组成的数组,以’\0’结尾。例如,”hello world”是一个字符串,它实际上是一个包含1…

    C 2023年5月23日
    00
  • C程序 检查一个数字是否为 Palindrome

    首先,需要明确Palindrome的定义:一个数字是Palindrome,当且仅当它的数字顺序倒过来后仍然相同。例如,121是Palindrome,而123不是Palindrome。 接下来,我们来介绍如何在C程序中检查一个数字是否为Palindrome。以下是完整的使用攻略: 步骤一:将数字转化为字符串 我们需要将要检查的数字转化为字符串,然后才能进行后续…

    C 2023年5月9日
    00
  • C语言实现学生管理系统总结

    C语言实现学生管理系统总结 本文将介绍使用C语言实现学生管理系统的完整攻略。学生管理系统是一个常见的管理系统的应用之一。通过它,我们可以对学生的信息进行管理和查询,提高管理效率。下面将详细介绍如何使用C语言实现学生管理系统。 1.需求分析 在开始实现学生管理系统之前,我们需要进行需求分析,明确系统的功能和需求。下面是该系统需要完成的功能和需求: 添加学生信息…

    C 2023年5月23日
    00
  • C语言超详细解析函数栈帧

    C语言超详细解析函数栈帧 什么是函数栈帧? 函数栈帧指的是函数在调用时所创建的一段内存区域,用于保存函数的局部变量、参数值、返回地址等信息。在函数调用完成后,这段内存区域将被销毁。 函数栈帧包含以下信息: 函数的返回地址 函数调用时的堆栈指针ESP 函数的局部变量 函数的参数 函数栈帧的组成包含以下部分: +————————-…

    C 2023年5月23日
    00
  • 创建二叉树 二叉树如何删除节点操作教程

    创建二叉树 要创建一颗二叉树,可以使用节点类(node class)来定义一个节点。每个节点对象包含了存储的值和指向左右子树的指针。下面是一个示例的节点类: class Node: def __init__(self, value): self.value = value self.left = None self.right = None 接着,我们就可以…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部