尤拉迴路 輸出尤拉迴路的路徑

2021-08-08 07:54:55 字數 1762 閱讀 3681

//有向or無向均可,重邊

step1:從u開始,找到與他相連的v,放入棧,刪除(u,v)這條邊,然後從v開始

step2:當有一點沒有與他相連的點時,放入path,然後從stack取棧頂繼續開始找點刪邊。

最後記得把棧裡的點放到path中。

path倒序輸出

//需要先找到起點

//鄰接表法,適合稀疏圖

#include

#include

#include

#include

#include

using

namespace

std;

const

intmaxn =

100+5;

vector

<

int> mp[

maxn];

multiset

<

int> mps[

maxn

];//

支援重邊

intn,m;

void

get_path(

ints)

else if

(cnt ==n)

break;

} while

(!stk.

empty

())

for(int

i = path.

size

() -

1;i >=

0;i -- )

cout

<< path[

i] <<

" ";

cout

<<

endl

;//倒序輸出! }

intmain()

ints =1;

get_path

(s);

} return0;

} //

鄰接矩陣法,適合稠密圖

#include

#include

#include

#include

#include

using

namespace

std;

const

intmaxn =

100+ 5;

intmp[maxn][

maxn];

intdeg[

maxn];

intin[

maxn

],out[

maxn

];//

有向圖

vector

<

int> path;

stack

<

int> stk;

intn,m;

void

get_path(

ints)

} }

else if

(cnt == n)

break;

} while

(!stk

.empty

())

for(int

i =

path

.size

() -

1; i >=

0; i --)

printf

("\n");

} intmain()

ints = 1;

get_path

(s); }

return0;

}

尤拉路徑 尤拉迴路

尤拉迴路 連通圖,一條路徑恰好經過所有邊一次,並且構成迴路 起點終點相同 尤拉路徑 連通圖,一條路徑恰好經過所有邊一次 起點終點不必相同 具有尤拉迴路的圖稱尤拉圖,具有尤拉路徑但不具有尤拉迴路的圖稱半尤拉圖 無向圖尤拉迴路的判斷 連通圖,所有頂點度數均為偶數 無向圖尤拉路徑的判斷 連通圖,只有兩頂點...

尤拉迴路 尤拉路徑

尤拉路徑 如果圖 g 種的一條路徑包括所有的邊,且僅通過一次的路徑.尤拉迴路 能回到起點的尤拉路徑.混合圖 既有無向邊又有無向邊的圖.hierholzer演算法自動尋找尤拉迴路,在找不到尤拉迴路的情況下會找到尤拉路徑。前提是得給它指定好起點。演算法流程 無向圖 1.判斷奇點數。奇點數若為0則任意指定...

尤拉迴路 UOJ117 尤拉迴路 題解

判斷無向圖和有向圖是不是尤拉迴路。如果是,求出任意一條尤拉迴路。判斷尤拉迴路 證明?我不會啊!怎麼求尤拉迴路呢?因為已經確定了是尤拉迴路,所以我們可以直接dfs瞎搞。隨便從乙個點開始dfs,一條邊走過後就刪除。回溯時將其入隊。最後的佇列反過來就是答案。原理 最後的佇列是返回路徑,所以反過來就是答案。...