//有向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,一條邊走過後就刪除。回溯時將其入隊。最後的佇列反過來就是答案。原理 最後的佇列是返回路徑,所以反過來就是答案。...