Khiêu chuyển chí

Âu lạp đồ

Bổn hiệt diện tương giản yếu giới thiệu âu lạp đồ đích khái niệm, thật hiện hòa ứng dụng.

Định nghĩa

  • Âu lạp hồi lộ:Thông quá đồ trung mỗi điều biên kháp hảo nhất thứ đích hồi lộ
  • Âu lạp thông lộ:Thông quá đồ trung mỗi điều biên kháp hảo nhất thứ đích thông lộ
  • Âu lạp đồ:Cụ hữu âu lạp hồi lộ đích đồ
  • Bán âu lạp đồ:Cụ hữu âu lạp thông lộ đãn bất cụ hữu âu lạp hồi lộ đích đồ

Tính chất

Âu lạp đồ trung sở hữu đỉnh điểm đích độ sổ đô thị ngẫu sổ.

NhượcThị âu lạp đồ, tắc tha vi nhược càn cá hoàn đích tịnh, thả mỗi điều biên bị bao hàm tại kỳ sổ cá hoàn nội.

Phán biệt pháp

  1. Vô hướng đồ thị âu lạp đồ đương thả cận đương:
    • Phi linh độ đỉnh điểm thị liên thông đích
    • Đỉnh điểm đích độ sổ đô thị ngẫu sổ
  2. Vô hướng đồ thị bán âu lạp đồ đương thả cận đương:
    • Phi linh độ đỉnh điểm thị liên thông đích
    • Kháp hữu 2 cá kỳ độ đỉnh điểm
  3. Hữu hướng đồ thị âu lạp đồ đương thả cận đương:
    • Phi linh độ đỉnh điểm thị cường liên thông đích
    • Mỗi cá đỉnh điểm đích nhập độ hòa xuất độ tương đẳng
  4. Hữu hướng đồ thị bán âu lạp đồ đương thả cận đương:
    • Phi linh độ đỉnh điểm thị nhược liên thông đích
    • Chí đa nhất cá đỉnh điểm đích xuất độ dữ nhập độ chi soa vi 1
    • Chí đa nhất cá đỉnh điểm đích nhập độ dữ xuất độ chi soa vi 1
    • Kỳ tha đỉnh điểm đích nhập độ hòa xuất độ tương đẳng

Cầu âu lạp hồi lộ hoặc âu lạp lộ

Fleury toán pháp

Dã xưng tị kiều pháp, thị nhất cá thiên bạo lực đích toán pháp.

Toán pháp lưu trình vi mỗi thứ tuyển trạch hạ nhất điều biên đích thời hầu ưu tiên tuyển trạch bất thị kiều đích biên.

Nhất cá quảng phiếm sử dụng đãn thị thác ngộ đích thật hiện phương thức thị tiên Tarjan dự xử lý kiều biên, nhiên hậu tái DFS tị miễn tẩu kiều. Đãn thị do vu tẩu đồ quá trình trung biên hội bị san khứ, nhất ta phi kiều biên hội biến vi kiều biên đạo trí thác ngộ. Tối giản đan đích thật hiện phương pháp thị mỗi thứ san trừ nhất điều biên chi hậu bạo lực bào nhất biến Tarjan trảo kiều, thời gian phục tạp độ thị.Phục tạp đích thật hiện phương pháp yếu dụng đáo động thái đồ đẳng, thật dụng giới trị bất cao.

Hierholzer toán pháp

Dã xưng trục bộ sáp nhập hồi lộ pháp.

Quá trình

Toán pháp lưu trình vi tòng nhất điều hồi lộ khai thủy, mỗi thứ nhậm thủ nhất điều mục tiền hồi lộ trung đích điểm, tương kỳ thế hoán vi nhất điều giản đan hồi lộ, dĩ thử tầm trảo đáo nhất điều âu lạp hồi lộ. Như quả tòng lộ khai thủy đích thoại, tựu khả dĩ tầm trảo đáo nhất điều âu lạp lộ.

Thật hiện

Hierholzer toán pháp đích bạo lực thật hiện như hạ:

Tính chất

Giá cá toán pháp đích thời gian phục tạp độ ước vi.Thật tế thượng hoàn hữu phục tạp độ canh đê đích thật hiện phương pháp, tựu thị tương trảo hồi lộ đích DFS hòa Hierholzer toán pháp đích đệ quy hợp tịnh, biên trảo hồi lộ biên sử dụng Hierholzer toán pháp.

Như quả nhu yếu thâu xuất tự điển tự tối tiểu đích âu lạp lộ hoặc âu lạp hồi lộ đích thoại, nhân vi nhu yếu tương biên bài tự, thời gian phục tạp độ thị( kế sổ bài tự hoặc giả cơ sổ bài tự khả dĩ ưu hóa chí). Như quả bất nhu yếu bài tự, thời gian phục tạp độ thị.

Ứng dụng

Hữu hướng âu lạp đồ khả dụng vu kế toán cơ dịch mã.

Thiết hữuCá tự mẫu, hi vọng cấu tạo nhất cá hữuCá phiến hình đích viên bàn, mỗi cá viên bàn thượng phóng nhất cá tự mẫu, sử đắc viên bàn thượng mỗi liên tụcVị đối ứng trường viĐích phù hào xuyến. Chuyển động nhất chu (Thứ ) hậu đắc đáo doCá tự mẫu sản sinh đích trường độ viĐíchCá các bất tương đồng đích phù hào xuyến.

Cấu tạo như hạ hữu hướng âu lạp đồ:

Thiết,Cấu tạo,Như hạ:

Quy địnhTrung đỉnh điểm dữ biên đích quan liên quan hệ như hạ:

Đỉnh điểmDẫn xuấtĐiều biên:.

BiênDẫn nhập đỉnh điểm.

Giá dạng đíchThị liên thông đích, thả mỗi cá đỉnh điểm nhập độ đẳng vu xuất độ ( quân đẳng vu), sở dĩThị hữu hướng âu lạp đồ.

Nhậm cầuTrung nhất điều âu lạp hồi lộ,ThủTrung các biên đích tối hậu nhất cá tự mẫu, án các biên tạiTrung đích thuận tự bài thành viên hình phóng tại viên bàn thượng tức khả.

Lệ đề

Lạc cốc P2731 kỵ mã tu sách lan

Cấp định nhất trương hữu 500 cá đỉnh điểm đích vô hướng đồ, cầu giá trương đồ đích nhất điều âu lạp lộ hoặc âu lạp hồi lộ. Như quả hữu đa tổ giải, thâu xuất tối tiểu đích na nhất tổ.

Tại bổn đề trung, âu lạp lộ hoặc âu lạp hồi lộ bất nhu yếu kinh quá sở hữu đỉnh điểm.

Biên đích sổ lượng m mãn túc.

Giải đề tư lộ

Dụng Fleury toán pháp giải quyết bổn đề đích thời hầu chỉ nhu yếu tái tham tâm tựu hảo, đãn thị do vu phục tạp độ bất đối, sở dĩ yếu hoán dụng Hierholzer toán pháp.

Bảo tồn đáp án khả dĩ sử dụngstd::stack&LTint>,Nhân vi như quả trảo đích bất thị hồi lộ đích thoại tất tu tương na nhất bộ phân phóng tại tối hậu.

Chú ý, bất năng sử dụng lân tiếp củ trận tồn đồ, phủ tắc thời gian phục tạp độ hội thối hóa vi.Do vu nhu yếu tương biên bài tự, kiến nghị sử dụng tiền hướng tinh hoặc giảstd::vectorTồn đồ. Kỳ lệ đại mã sử dụngstd::vector.

Kỳ lệ đại mã
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include&LTalgorithm>
#include&LTcstdio>
#include&LTstack>
#include&LTvector>
usingnamespacestd;

structedge{
intto;
boolexists;
intrevref;

booloperator(constedge&b)const{returntob.to;}
};

vectoredge>beg[505];
intcnt[505];

constintdn=500;
stackint>ans;

voidHierholzer(intx){// quan kiện hàm sổ
for(int&i=cnt[x];i(int)beg[x].size();){
if(beg[x][i].exists){
edgee=beg[x][i];
beg[x][i].exists=0;
beg[e.to][e.revref].exists=0;
++i;
Hierholzer(e.to);
}else{
++i;
}
}
ans.push(x);
}

intdeg[505];
intreftop[505];

intmain(){
for(inti=1;idn;++i){
beg[i].reserve(1050);// vector dụng reserve tị miễn động thái phân phối không gian, gia khoái tốc độ
}

intm;
scanf("%d",&m);
for(inti=1;im;++i){
inta,b;
scanf("%d%d",&a,&b);
beg[a].push_back((edge){b,1,0});
beg[b].push_back((edge){a,1,0});
++deg[a];
++deg[b];
}

for(inti=1;idn;++i){
if(!beg[i].empty()){
sort(beg[i].begin(),beg[i].end());// vi liễu yếu án tự điển tự tham tâm, tất tu bài tự
}
}

for(inti=1;idn;++i){
for(intj=0;j(int)beg[i].size();++j){
beg[i][j].revref=reftop[beg[i][j].to]++;
}
}

intbv=0;
for(inti=1;idn;++i){
if(!deg[bv]&&deg[i]){
bv=i;
}elseif(!(deg[bv]&1)&&(deg[i]&1)){
bv=i;
}
}

Hierholzer(bv);

while(!ans.empty()){
printf("%d\n",ans.top());
ans.pop();
}
}

Tập đề