POJ 1300 判斷尤拉迴路

2022-09-08 16:36:26 字數 2845 閱讀 1774

題意:能否找到一條路徑經過所有開著門的房間,並使得:1:通過門後立即把門關上,2:關上的門不在開啟,3:最後回到你自己的房間(房間0),並且所有的門都已經關閉。

題目已知這是連通圖。

分析:以房間為頂點,連線房間之間的門為邊構造圖。根據題意,輸入檔案的每個測試資料所構造的圖都是連通的。本題實際上是判斷乙個圖中是否存在尤拉迴路或者尤拉通路。

乙個無向圖存在尤拉迴路,當且僅當該圖所有頂點度數都是偶數且該圖是連通圖。

乙個有向圖存在尤拉迴路,所有頂點的入度等於出度且該圖是連通圖

這題是無向圖。

這題的關鍵其實是在讀入輸入。。。1:因為有空行,而且這些空行都是有用的資訊,所以不能簡單的用cin||scanf輸入每個房間通往其他房間的房間號。

注意下面**。

view code

//

i'm the topcoder//c

#include #include

#include

#include

#include

#include

//c++

#include #include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

//*************************output*************************

#ifdef win32

#define int64 "%i64d"

#define uint64 "%i64u"

#else

#define int64 "%lld"

#define uint64 "%llu"

#endif

//**************************constant***********************

#define inf 0x3f3f3f3f

#define eps 1e-8

#define pi acos(-1.)

#define pi2 asin (1.);typedef

long

long

ll;//

typedef __int64 ll;

//codeforces

typedef unsigned int

ui;typedef unsigned

long

long

ui64;

#define mp make_pairtypedef vector

vi;typedef pair

pii;

#define pb push_back

#define mp make_pair

//***************************sentence************************

#define cl(a,b) memset (a, b, sizeof (a))

#define sqr(a,b) sqrt ((double)(a)*(a) + (double)(b)*(b))

#define sqr3(a,b,c) sqrt((double)(a)*(a) + (double)(b)*(b) + (double)(c)*(c))

//****************************function************************

template double dis(t va, t vb)

template

inline t integer_len(t v)

template

inline t square(t va, t vb)

//aply for the memory of the stack

//#pragma comment (linker, "/stack:1024000000,1024000000")

//end

const

int maxn = 1010

;char

s[maxn];

char

s2[maxn];

intn,m;

int door[maxn];//

計算每個房間的門數

int doors;//

門的總數

inteven,odd;

intmain()

doors=0; even=0; odd=0

; getchar();

scanf(

"%d%d

",&m,&n);

getchar();

//不可少;

memset(door,0,sizeof

(door));

for(int i=0;i)}}

gets(s);

for(int i=0;i)

if(odd==0&&m==0) printf("

yes %d\n

",doors);

else

if(odd==2&&door[m]%2==1&&door[0]%2==1&&m!=0

)

else printf("

no\n");

}return0;

}

尤拉迴路的判定 poj 1300

這個題卡了一上午卡到心態 卡到欲仙欲死。各種bug蜜汁出現。一邊一遍的除錯,忽然發現思考成熟是多麼的重要!最後是乙個短路效應的問題,懷疑人生!這個題就是統計出度和入度,就是建圖有點麻煩,其實也不算太麻煩了。對於無向圖而言就是 判斷是否滿足沒有奇度頂點,或者奇度定點只有兩個,並且這兩個奇度頂點其中乙個...

poj 1300 尤拉迴路 通路 解題報告

最近學了一些dp的皮毛之後,現在開始圖論知識的學習,說實話,初步不知道怎麼弄這個,然後無意間在網上下了一本關於圖論的演算法設計程式的教程,然後感覺還不錯,結果後面才發現原來多年前,我的師兄就給了我這樣一本好的資料。感覺有點小悲催啊。有點對不起師兄的感覺,然後今天終於寫了乙個小知識點,尤拉迴路的一題,...

POJ 1300 判斷是否存在尤拉迴路(包含定理)

判斷存在尤拉迴路的定理 尤拉通路和尤拉迴路的判定是很簡單的,請看下面的定理及推論。定理5.1 無向圖g 存在尤拉通路的充要條件是 g 為連通圖,並且g 僅有兩個奇度結點 度數為奇數的頂點 或者無奇度結點。推論5.1 1 當g 是僅有兩個奇度結點的連通圖時,g 的尤拉通路必以此兩個結點為端點。2 當g...