題目描述 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是乙個與其他農民一樣懶的人。他討厭騎馬,因此從來不兩次經過乙個柵欄。你必須編乙個程式,讀入柵欄網路的描述,並計算出一條修柵欄的路徑,使每個柵欄都恰好被...