尤拉路徑 騎馬修柵欄

2021-10-02 12:41:02 字數 1496 閱讀 5859

農民john每年有很多柵欄要修理。

他總是騎著馬穿過每乙個柵欄並修復它破損的地方。

john是乙個與其他農民一樣懶的人。

他討厭騎馬,因此從來不兩次經過乙個柵欄。

你必須編乙個程式,讀入柵欄網路的描述,並計算出一條修柵欄的路徑,使每個柵欄都恰好被經過一次。

john能從任何乙個頂點(即兩個柵欄的交點)開始騎馬,在任意乙個頂點結束。

每乙個柵欄連線兩個頂點,頂點用 1 到 500 標號(雖然有的農場並沒有 500 個頂點)。

乙個頂點上可連線任意多( ≥1 )個柵欄。

所有柵欄都是連通的(也就是你可以從任意乙個柵欄到達另外的所有柵欄)。

你的程式必須輸出騎馬的路徑(用路上依次經過的頂點號碼表示)。

我們如果把輸出的路徑看成是乙個500進製的數,那麼當存在多組解的情況下,輸出500進製表示法中最小的乙個 (也就是輸出第乙個數較小的,如果還有多組解,輸出第二個數較小的,等等)。

輸入資料保證至少有乙個解。

輸入格式

第 1 行:乙個整數 f,表示柵欄的數目;

第 2 到 f+1 行:每行兩個整數 i,j 表示這條柵欄連線 i 與 j 號頂點。

輸出格式

輸出應當有 f+1 行,每行乙個整數,依次表示路徑經過的頂點號。

注意資料可能有多組解,但是只有上面題目要求的那一組解是認為正確的。

資料範圍

1 ≤f

≤1024

,1≤f≤1024,

1≤f≤10

24,1≤i

,j

≤500

1≤i,j≤500

1≤i,j≤

500輸入樣例:

91 2

2 33 4

4 24 5

2 55 6

5 74 6

輸出樣例:12

3425

4657

#include

using

namespace std;

int f;

const

int n=

1100

;int ans[

2200];

int g[n]

[n];

int d[n]

,cnt;

void

dfs(

int u)

} ans[

++cnt]

=u;}

intmain()

int begin=1;

while

(!d[begin]

) begin++

;for

(int i=

1;i<=

1024

;i++)}

dfs(begin)

;for

(int i=cnt;i;i--

)printf

("%d\n"

,ans[i]);

}

尤拉路徑 USACO 騎馬修柵欄

題意 給出乙個無向圖,求尤拉路徑 不重複地經過所有邊 經過的點的次序。做法 找出尤拉路徑的方法就是採用dfs的方式,找到第乙個入度為奇數的點開始dfs。對於當前的點,從大到小列舉所有點,找到和它相連的,找到乙個之後刪除它們之間的連線,並去搜尋新的那個點,如果沒有找到點和它相連,那麼就把這個點加入輸出...

P2731 騎馬修柵欄 (尤拉路徑)

題目描述 john是乙個與其他農民一樣懶的人。他討厭騎馬,因此從來不兩次經過乙個柵欄。你必須編乙個程式,讀入柵欄網路的描述,並計算出一條修柵欄的路徑,使每個柵欄都恰好被經過一次。john能從任何乙個頂點 即兩個柵欄的交點 開始騎馬,在任意乙個頂點結束。每乙個柵欄連線兩個頂點,頂點用1到500標號 雖...

鏟雪車 騎馬修柵欄 (尤拉路徑和尤拉迴路)

今天上午的訓練賽涉及到的,順便補一下叭。相信大家都聽說過著名的七橋問題,而尤拉迴路就是偉大的數學家尤拉為了解決七橋問題提出的。首先介紹一下基本概念 在乙個圖中,經過每條邊一次並且只經過一次的迴路被稱為尤拉迴路,路徑被稱為尤拉路徑。根據名字就可以知道,迴路是起點終點相同的,而路徑是起點終點不同的。其實...