農民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標號 雖...
鏟雪車 騎馬修柵欄 (尤拉路徑和尤拉迴路)
今天上午的訓練賽涉及到的,順便補一下叭。相信大家都聽說過著名的七橋問題,而尤拉迴路就是偉大的數學家尤拉為了解決七橋問題提出的。首先介紹一下基本概念 在乙個圖中,經過每條邊一次並且只經過一次的迴路被稱為尤拉迴路,路徑被稱為尤拉路徑。根據名字就可以知道,迴路是起點終點相同的,而路徑是起點終點不同的。其實...