第三部分 數據結構 -- 第四章 圖論算法1374:鏟雪車(snow)

1374:鏟雪車(snow)

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 3722 通過數: 1545
【題目描述】
隨着白天越來越短夜晚越來越長,我們不得不考慮剷雪問題了。整個城市所有的道路都是雙車道,因爲城市預算的削減,整個城市只有1輛鏟雪車。鏟雪車只能把它開過的地方(車道)的雪鏟乾淨,無論哪兒有雪,鏟雪車都得從停放的地方出發,遊歷整個城市的街道。現在的問題是:最少要花多少時間去剷掉所有道路上的雪呢?

【輸入】
輸入數據的第1行表示鏟雪車的停放座標(x,y),x,y爲整數,單位爲米。下面最多有100行,每行給出了一條街道的起點座標和終點座標,所有街道都是筆直的,且都是雙向一個車道。鏟雪車可以在任意交叉口、或任何街道的末尾任意轉向,包括轉U型彎。鏟雪車剷雪時前進速度爲20 km/h,不剷雪時前進速度爲50 km/h。

保證:鏟雪車從起點一定可以到達任何街道。

【輸出】
剷掉所有街道上的雪並且返回出發點的最短時間,精確到分種。

【輸入樣例】
0 0
0 0 10000 10000
5000 -10000 5000 10000
5000 10000 10000 10000
【輸出樣例】
3:55
【提示】
【註解】

3小時55分鐘


思路:對於每一條邊都有兩個方向可走,即每一個單獨的點都至少有偶數條邊相連,也就是有0個奇點,可從任意一點出發並不重複地遍歷每一條路,這個圖是歐拉圖。統計每一條路的長度除速度20千米每小時就是答案。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#define N 501
using namespace std;
typedef long long ll;

int main(){
	ll s,e;
	ll x1,y1,x2,y2;
	double dis = 0;
	cin >> s >> e;
	while(scanf("%lld%lld%lld%lld",&x1,&y1,&x2,&y2) != EOF)
	{
		dis += sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));//兩點之間距離公式,路長
		
	}
	
	double ans = dis * 2/1000/20;//走2遍*2單位化成KM /1000,速度20km/h->ans/20
	ll h = ll (ans);//h取整
	ll m = ll((ans-h)*60+0.5);//化成分鐘數
	printf("%lld:%02lld\n",h,m);
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章