铲雪车 题型:欧拉路径和欧拉回路

96 阅读1分钟

铲雪车

题目保证保证:铲雪车从起点一定可以到达任何街道。因此说明这一定是一个连通图。

第二,因为一条路只有一个出度和入度,因此一定是一个欧拉回路。(满足欧拉回路的条件)

因此我们一定可以满足所有的路都只走一次,这样铲雪车就能保证一直行驶在铲雪的路上,速度保持在20km/h。

我们只需要计算出比每条路的长度/20就可以计算出铲完所有的学所花费的时间。

注意,因为题目说了每一条路都是双向道,因此每次铲学都只会铲清一侧的学,我们需要来回一趟才能把一条路的上的学清理干净。因此我们计算路的长度之后需要把长度*2。

因为题目只给我们一条路入口的坐标和终点的坐标,因此我们可以用曼哈顿距离算式求出这条路的长度:

d=(x2x1)2+(y2y1)2d=\sqrt{(x2-x1)^{2}+(y2-y1)^{2}}

code

#include<bits/stdc++.h>
using namespace std;

int main()
{

	
	double x1, y1, x2, y2; cin >> x1 >> y1;
double dist=0;
	while (cin >> x1 >> y1 >> x2 >> y2)
	{
		double dx = x1 - x2;
		double dy = y1 - y2;
		dist += sqrt(dx*dx+dy*dy)*2;
	}

	int minutes = round(dist / 1000 / 20*60);   //双向道 转化为km  /速度20  求出花费的小时
	//int hour = minutes / 60;       //转化为小时
	int hour = minutes / 60;         //看一下剩多少分钟
	minutes %= 60;

		printf("%d:%02d\n",hour,minutes);
	return 0;
}

image.png