歐拉(通)迴路
歐拉道路:
概念:
從無向圖中的一個結點出發走出一條道路,每條邊恰好經過一次。這樣的路線稱爲歐拉道路,也可形象的稱爲“一筆畫”。
性質:
除了起點和終點以外,其他點的“進出”次數應該相等。換句話說,除了起點和終點以外,其他點的度數應該是偶數;
這也就引出了歐拉道路的充分條件:如果一個無向圖是連通的,且最多隻有兩個奇點,則一定是歐拉道路。且必須從一個奇點出發,另一個奇點終止;如果沒有奇點,那麼可以從任意點出發,最終會回到起點,這也就是歐拉回路
這個性質也可以用到有向圖中:
最多隻有兩個點的入度不等於出度,而且必須是其中一個點的出度恰好比入度大1,另一個的入度比出度大1,前提是這個圖連通;
僞代碼實現:
void dfs(int u){
for(int v=1;v<=n;v++){
if(ma[u][v]&&!vis[u][v]){
vis[u][v]=vis[v][u]=1;
dfs(v);
cout<<u<<" "<<v<<endl;//這裏是倒序打印路徑,如果要正序,入棧就行
}
}
}