歐拉路 與 歐拉回路

定義

歐拉路:從圖中一個點s出發(fā),到圖中的一點t,經(jīng)過每條邊且每條邊僅經(jīng)過一次
歐拉回路:歐拉路中s==t

判定條件

  • 無向圖 所有邊聯(lián)通
  1. 存在歐拉路:度數(shù)為奇數(shù)的點的個數(shù)為0或2
  2. 存在歐拉回路:度數(shù)為奇數(shù)的點的個數(shù)為0
  • 有向圖 所有邊聯(lián)通
  1. 存在歐拉路:
    所有點的入度==出度

    除起點(出度==入度+1)和終點(入度==出度+1)外,其他點的入度==出度
  2. 存在歐拉回路:除起點(出度==入度+1)和終點(入度==出度+1)外,其他點 的入度==出度

可以看出歐拉回路是歐拉路的一種特殊情況

例題

  • 鏟雪車
    思路:
    1. 保證:鏟雪車從起點一定可以到達任何街道。說明鏟雪車在某條街道上
    2. 可以判定每個點的入度==出度,時間最短所對應(yīng)的路徑為歐拉回路的路徑,則時間=路徑/速度即可
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

int main(){
    double x1,y1,x2,y2,sum=0;
    cin>>x1>>x2;
    while(cin>>x1>>y1>>x2>>y2){
        double x=x2-x1,y=y2-y1;
        sum+=sqrt(x*x+y*y)*2;
    }
    int minutes=round(sum/1000/20*60);//四舍五入函數(shù) cmath中 
    int hours=minutes/60;
    minutes%=60;
    printf("%d:%02d",hours,minutes);//%02d 為保留整數(shù)最低的兩位 不足用前導(dǎo)零補齊 
    
    return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容