現在寫到尤拉路,理解起來並不算特別困難...吧...
但是非常噁心的是每次都要除錯半天,做不到一遍兩遍就能ac
每次寫程式都對於程式的整體構架沒有清晰的思路,想到**寫到**真的是個非常差的習慣[儘管在寫不出來的時候非常有用],所以快點改掉吧.
似乎也沒有什麼特別困難的部分,相關的題在oj上是p1209-p1211
陣列一定要記得稍微開大一點,不要順手就打乙個資料範圍上去,很初級也很常見的錯誤
應該深入理解一下dfs之後記錄的作用,但是我到現在還不理解
以p1210為例
☆騎馬修柵欄
描述 description
農民john每年有很多柵欄要修理。他總是騎著馬穿過每乙個柵欄並修復它破損的地方。
john是乙個與其他農民一樣懶的人。他討厭騎馬,因此從來不兩次經過同乙個柵欄。你必須編乙個程式,讀入柵欄網路的描述,並計算出一條修柵欄的路徑,使每個柵欄都恰好被經過一次。john能從任何乙個頂點(即兩個柵欄的交點)開始騎馬,在任意乙個頂點結束。
每乙個柵欄連線兩個頂點,頂點用1到500標號(雖然有的農場並沒有500個頂點)。乙個頂點上可連線任意多(>=1)個柵欄。所有柵欄都是連通的(也就是你可以從任意乙個柵欄到達另外的所有柵欄)。
你的程式必須輸出騎馬的路徑(用路上依次經過的頂點號碼表示)。我們如果把輸出的路徑看成是乙個500進製的數,那麼當存在多組解的情況下,輸出500進製表示法中最小的乙個 (也就是輸出第乙個數較小的,如果還有多組解,輸出第二個數較小的,等等)。
輸入格式 input format
第1行: 乙個整數f(1 <= f <= 1024),表示柵欄的數目
第2到f+1行: 每行兩個整數i, j(1 <= i,j <= 500)表示這條柵欄連線i與j號頂點。
輸出格式 output format
輸出應當有f+1行,每行乙個整數,依次表示路徑經過的頂點號。注意資料可能有多組解,但是只有上面題目要求的那一組解是認為正確的。
樣例輸入 sample input
樣例輸出 sample output
時間限制 time limitation
1s注釋 hint
字典序最小的尤拉路
給乙個例子:
** source
usaco 3.3.1
flag
accepted
題號
p1210
型別(?)
圖結構通過
58人提交
205次
通過率
28%難度1提交
討論題解
資料**如下[裡面有非常不必要的東西..但是都這樣了也懶得改回去了]
1 #include2 #include3 #include4 #include5view codeusing
namespace
std;
6int maxn=0;7
int tail=0;8
int flag=0;9
intf,ss;
10int sta[510]={};
11int sum[510]={};
12int woc[510][510]={};
13int mos[510][510]={};
14int cun[510]={};
15void mydfs(int x,int
k)27}28
}29}30
}31intmain()
40if(y>maxn)
43 sum[x]++;
44 sum[y]++;
45 mos[y][++mos[y][0]]=x;
46 mos[x][++mos[x][0]]=y;
47 woc[x][y]+=1
;48 woc[y][x]+=1;49
}50for(int i=1;i<=maxn;i++)54}
55int f1=0;56
for(int i=1;i<=500;i++)61}
62if(f1!=0)66
else
70return0;
71 }
尤拉迴路,尤拉路
參考以上 判斷尤拉路,尤拉迴路 注意圖聯通,可以dfs 或者並查集 一 無向圖 尤拉迴路 每個頂點度數都是偶數 尤拉路 所有點度數為偶數,或者只有2 個點度數為奇數 二 有向圖 非混合 尤拉迴路 每個頂點入度等於出度 尤拉路 每個頂點入度等於出度 或者只有1 個點入度比出度小 1,從這點出發,只有 ...
尤拉路 尤拉迴路
1 尤拉路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,這條路叫做尤拉路。2 尤拉迴路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,出發點亦是終點,這樣的路是尤拉迴路。1 無向圖有一條尤拉路 圖是連通的,且全部的結點的度是偶數 就是尤拉迴路的情況 或只有兩個結點的度是奇數。2 無...
尤拉函式小結
概念 尤拉函式用希臘字母 表示,n 表示n的尤拉函式 對 n 的值,我們可以通俗地理解為小於n且與n互質的數的個數 包含1 性質 1 對於素數p,p p 1 2 對乙個正整數n分解質因數 n p1 q1 p2 q2 pn qn 則 n n 1 1 p1 1 1 p2 1 1 pn 分解質因數模板 分...