1 //这个方法只能是简单图,重边无法处理:
2
3 #include<iostream>
4
5 #include<math.h>
6
7 #include<string.h>
8
9 #include<time.h>
10
11 #include<stdio.h>
12
13 #include<cstdlib>
14
15 #include <malloc.h>
16
17 #include<queue>
18
19 #include<stack>
20
21 #include<windows.h>//使用Sleep()
22
23 using namespace std;
24
25 const int MAXN = 1000;
26
27 int n, m, G[MAXN][MAXN], vis[MAXN][MAXN];
28
29 void euler(int u)//从u顶点开始
30
31 {
32
33 for(int i=0;i<n;i++)
34
35 {
36
37 if(G[u][i]&&!vis[u][i])
38
39 {
40
41 vis[u][i]=vis[i][u]=1;
42
43 cout<<"("<<u<<","<<i<<")"<<endl;
44
45 euler(i);
46
47 }
48
49 }
50
51 }
52
53 int main(int argc, char* argv[])
54
55 {
56
57 memset(G,0,sizeof(G));
58
59 memset(vis,0,sizeof(vis));
60
61 cout<<"多少个点:"<<endl;
62
63 cin>>n;
64
65 cout<<"多少条边:"<<endl;
66
67 cin>>m;
68
69 int v1;
70
71 int v2;
72
73 for(int i=0;i<m;i++)
74
75 {
76
77 cin>>v1>>v2;
78
79 G[v1][v2]=G[v2][v1]=1;
80
81 }
82
83 euler(0);
84
85 ::system("pause");
86
87 return 0;
88
89 }
90
91
92
93
94
95
96
97
98
99 以下实现重边情况:
100
101 #include<iostream>
102
103 #include<math.h>
104
105 #include<string.h>
106
107 #include<time.h>
108
109 #include<stdio.h>
110
111 #include<cstdlib>
112
113 #include <malloc.h>
114
115 #include<queue>
116
117 #include<stack>
118
119 #include<windows.h>//使用Sleep()
120
121 using namespace std;
122
123 const int MAXN = 1000;
124
125 int n, m, G[MAXN][MAXN], can_vis[MAXN][MAXN];
126
127 void euler(int u)//从u顶点开始
128
129 {
130
131 for(int i=0;i<n;i++)
132
133 {
134
135 if(G[u][i]&&can_vis[u][i])
136
137 {
138
139 can_vis[u][i]=--can_vis[i][u];
140
141 cout<<"("<<u<<","<<i<<")"<<endl;
142
143 euler(i);
144
145 }
146
147 }
148
149 }
150
151 int main(int argc, char* argv[])
152
153 {
154
155 memset(G,0,sizeof(G));
156
157 memset(can_vis,0,sizeof(can_vis));
158
159 cout<<"多少个点:"<<endl; cin>>n;
160
161 cout<<"多少条边:"<<endl; cin>>m;
162
163 int v1;
164
165 int v2;
166
167 for(int i=0;i<m;i++)
168
169 {
170
171 cin>>v1>>v2;
172
173 G[v1][v2]=++G[v2][v1];
174
175 }
176
177 for(int i=0;i<MAXN;i++)
178
179 {
180
181 for(int j=0;j<MAXN;j++)
182
183 {
184
185 can_vis[i][j]=G[i][j];
186
187 }
188
189 }
190
191 euler(0);
192
193 ::system("pause");
194
195 return 0;
196
197 }