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 }