codevs 騎馬修柵欄 2039

2021-07-26 14:01:09 字數 1867 閱讀 6778

題目描述 description

farmer john每年有很多柵欄要修理。他總是騎著馬穿過每乙個柵欄並修復它破損的地方。john是乙個與其他農民一樣懶的人。他討厭騎馬,因此從來不兩次經過乙個柵欄。你必須編乙個程式,讀入柵欄網路的描述,並計算出一條修柵欄的路徑,使每個柵欄都恰好被經過一次。john能從任何乙個頂點(即兩個柵欄的交點)開始騎馬,在任意乙個頂點結束。每乙個柵欄連線兩個頂點,頂點用1到500標號(雖然有的農場並沒有500個頂點)。乙個頂點上可連線任意多(>=1)個柵欄。兩頂點間可能有多個柵欄。所有柵欄都是連通的(也就是你可以從任意乙個柵欄到達另外的所有柵欄)。你的程式必須輸出騎馬的路徑(用路上依次經過的頂點號碼表示)。我們如果把輸出的路徑看成是乙個500進製的數,那麼當存在多組解的情況下,輸出500進製表示法中最小的乙個 (也就是輸出第乙個數較小的,如果還有多組解,輸出第二個數較小的,等等)。輸入資料保證至少有乙個解。

輸入描述 input description

第1行: 乙個整數f(1 <= f <= 1024),表示柵欄的數目

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

輸出描述 output description

輸出應當有f+1行,每行乙個整數,依次表示路徑經過的頂點號。注意資料可能有多組解,但是只有上面題目要求的那一組解是認為正確的。

樣例輸入 sample input

91 2

2 33 4

4 24 5

2 55 6

5 74 6

樣例輸出 sample output12

3425

465**:

vara:array[0..2000]of longint;

d:array[0..500]of longint;

e,v:array[0..500,0..500]of longint;

x,y,i,f,n,s1:longint;

procedure dfs(t:longint);

vars2,j:longint;

begin

for j:=1 to 500 do

if (e[t,j]=1)and(v[t,j]>0) then

begin

dec(v[j,t]);

dec(v[t,j]);

dfs(j);

end;

inc(f);

a[f]:=t;

end;

procedure init;

vark:longint;

begin

readln(n);

s1:=maxlongint;

for i:=1 to n do

begin

readln(x,y);

if xif ye[x,y]:=1;

e[y,x]:=1;

d[x]:=d[x]+1;

d[y]:=d[y]+1;

v[x,y]:=v[x,y]+1;

v[y,x]:=v[y,x]+1;

end;

end;

procedure main;

begin

for i:=1 to 500 do

if d[i] mod 2=1 then

begin

s1:=i;

break;

end;

dfs(s1);

end;

procedure print;

begin

for i:=f downto 1 do

writeln(a[i]);

end;

begin

init;

main;

print;

end.

CodeVS2039 騎馬修柵欄

farmer john每年有很多柵欄要修理。他總是騎著馬穿過每乙個柵欄並修復它破損的地方。john是乙個與其他農民一樣懶的人。他討厭騎馬,因此從來不兩次經過乙個柵欄。你必須編乙個程式,讀入柵欄網路的描述,並計算出一條修柵欄的路徑,使每個柵欄都恰好被經過一次。john能從任何乙個頂點 即兩個柵欄的交點...

騎馬修柵欄

對剛學的尤拉迴路的練習。錯點 萬一是尤拉路徑不是尤拉迴路的話,不能只選乙個最小的點當起點。要選度數為奇數的兩個點中較小的乙個。2.1 不一定在連通圖內,不能單純的把 1 當做起點。3.見 中的注釋。include include include includeusing namespace std ...

騎馬修柵欄題解

最近在luogu做了一道叫烏鴉坐飛機騎馬修柵欄的題。farmer john每年有很多柵欄要修理。他總是騎著馬穿過每乙個柵欄並修復它破損的地方。john是乙個與其他農民一樣懶的人。他討厭騎馬,因此從來不兩次經過乙個柵欄。你必須編乙個程式,讀入柵欄網路的描述,並計算出一條修柵欄的路徑,使每個柵欄都恰好被...