幾個入門的題目:
hdu 1878
判定乙個圖是否存在尤拉迴路。
直接判斷圖是否連通和每個點的度數是否為偶數就行了。(可用並查集判斷連通,也可以用dfs)
#include #include#include
#include
using
namespace
std;
const
int maxn = 1100
;int
in[maxn];
intf[maxn];
void
init()
int find(int
x)void union(int x, int
y)int
main()
int flag = 1
;
for (int i = 1; i <= n; i++)
}if(flag)}}
printf(
"%d\n
", flag);
}return0;
}
poj 1041
求尤拉迴路。
dfs回溯的時候求,因為是個迴路,所以要在回溯的時候加到 答案 陣列當中
#include #include#include
using
namespace
std;
const
int maxn = 2000
;struct
edge edge[
5000000
];int
tot;
inthead[maxn];
intin
[maxn];
intf[maxn];
void
init()
void addedge(int u, int v, int
id)int find(int
x)void union(int x, int
y)int
n;bool
check()
int s[5000000
];bool vis[5000000
];int
top;
void dfs(intu)}
intmain()
if (!check())
puts(
"round trip does not exist.");
else
}return0;
}
uva10054
求尤拉迴路。
#include #include#include
using
namespace
std;
const
int maxn = 2000
;struct
edge edge[
1000100
];int
tot;
inthead[maxn];
intin
[maxn];
intf[maxn];
void
init()
void addedge(int u, int
v)int find(int
x)void union(int x, int
y)int
n;bool color[100
];int
st;bool
check()
edge ans[
1000010
];bool vis[1000010
];int
top;
void dfs(intu)}
intmain()
st =u;
if (!check())
printf(
"case #%d\nsome beads may be lost\n
", ++kase);
else
if(t)
printf("\n
");}
return0;
}
尤拉路徑 尤拉迴路
尤拉迴路 連通圖,一條路徑恰好經過所有邊一次,並且構成迴路 起點終點相同 尤拉路徑 連通圖,一條路徑恰好經過所有邊一次 起點終點不必相同 具有尤拉迴路的圖稱尤拉圖,具有尤拉路徑但不具有尤拉迴路的圖稱半尤拉圖 無向圖尤拉迴路的判斷 連通圖,所有頂點度數均為偶數 無向圖尤拉路徑的判斷 連通圖,只有兩頂點...
尤拉迴路 尤拉路徑
尤拉路徑 如果圖 g 種的一條路徑包括所有的邊,且僅通過一次的路徑.尤拉迴路 能回到起點的尤拉路徑.混合圖 既有無向邊又有無向邊的圖.hierholzer演算法自動尋找尤拉迴路,在找不到尤拉迴路的情況下會找到尤拉路徑。前提是得給它指定好起點。演算法流程 無向圖 1.判斷奇點數。奇點數若為0則任意指定...
尤拉路徑和尤拉迴路的路徑
尤拉路徑和尤拉迴路 尤拉路徑 從某結點出發一筆畫成所經過的路線叫做尤拉路徑。尤拉迴路 在尤拉路徑的基礎上又回到起點。a 凡是由偶點組成的連通圖,一定可以一筆畫成。畫時可以把任一偶點為起點,最後一定能以這個點為 終點畫完此圖。b 凡是只有兩個奇點的連通圖 其餘都為偶點 一定可以一筆畫成。畫時必須把乙個...