- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
欧拉回路与二分图匹配
欧拉回路:给定一个无向图,找出一条经过每条边有且仅有一次的路径,这条路径就叫做欧拉路径。如果这条路径的起点和终点是同一个点的话,这条路径就叫做欧拉回路。
定理1:无向图G具有一条欧拉路,当且仅当G是连通的,且有不超过两个奇度定点。
推论:无向图G具有一条欧拉回路,当且仅当G是连通的,且所有定点的度数都为偶数。
欧拉回路算法:
procedure finc_circuit(node i); {递归找圈}
{Circuitpos表示当前的输出序列长度,circuit表示输出路径}
if node I 没有邻接点 then
begin
circuit(circuitpos)=node I; {加入序列}
circuitpos=circuitpos+1;
end
else
while (node i有邻接点) do
begin
delete_edges(node j, node i); {删除边(I,j)}
find_circuit(node j);{继续递归找圈}
end;
circuit(circuitpos)=node I {加入序列}
circuitpos=circuitpos+1
procedure ouler
circuitpos=0; {初始化}
finc_circuit(node 1); {递归求解}const maxn=100;
var
e,_a,_b, {e表示边数}
nsequence,i,j,n, {nsequence记录输出序列的长度}
dep:integer; {dep为栈指针}
ok:boolean;
map:array[0..maxn,0..maxn] of integer; {记录无向图}
stack,sequence:array[0..maxn*maxn] of integer; {栈,输出序列}
begin
fillchar(map,sizeof(map),0);
assign(input,oula.in);
reset(input);
read(n,e);
for i:=1 to e do begin {以边的方式读入}
read(_a,_b);
inc(map[_a,_b]);
end;
dep:=1; stack[1]:=1; nsequence:=0;
while dep0 do begin
j:=stack[dep];
ok:=false;
for i:=1 to n do if map[j,i]0 then begin {是否存在邻接点}
dec(map[j,i]);
dec(map[i,j]);
ok:=true;
inc(dep); stack[dep]:=i; {入栈}
break;
end;
if not ok then begin
inc(nsequence);
sequence[nsequence]:=stack[dep]; {加入输出序列}
dec(dep);
end;
end;
for i:=1 to nsequence do write(sequence[i], );
writeln;
end.
递归程序:
const maxn=100;
var
e,a,b,nsequence,i,j,n:integer;
map:array[0..maxn,0..maxn] of integer;
sequence:array[0..maxn*maxn] of integer;
procedure recursion(location:integer);
var ok:boolean;
i:integer;
begin
ok:=false;
for i:=1 to n do if map[location,i]0 then begin
dec(map[location,i]); dec(map[i,location]);
ok:=true;
recursion(i);
end;
if not ok then begin
您可能关注的文档
- 明理南桥围堰导流方案.doc
- 易出错的题.ppt
- 易经节气养生法之夏季篇.doc
- 易飞ERP-超领、缺领、超入控制.doc
- 易错的字测试.doc
- 易拉罐装酒机结构.doc
- 星星和人类一样,.ppt
- 春天的故事changshu.ppt
- 春季观花植物 木本类 梅花.doc
- 春江花月夜导学案(.doc
- 2024年云南省中甸县卫生高级职称(卫生管理)考试题含答案.docx
- 2025年潍坊工商职业学院单招职业适应性测试题库完美版.docx
- 2024年浙江省文成县普通外科学(副高)考试题含答案.docx
- 真空负压引流套在伤口护理中的应用.ppt
- 2024年浙江省安吉县普通外科学(副高)考试题含答案.docx
- 2024年浙江省安吉县急诊医学(副高)考试题含答案.docx
- 2024年云南省镇康县急诊医学(副高)考试题含答案.docx
- 2024年云南省镇康县卫生高级职称(卫生管理)考试题含答案.docx
- 课题合作合同协议书.doc
- 2025年潍坊环境工程职业学院单招职业倾向性测试题库及参考答案.docx
文档评论(0)