1 //求欧拉回路或欧拉路,邻接阵形式,复杂度O(n^2)
2 //返回路径长度,path返回路径(有向图时得到的是反向路径)
3 //传入图的大小n和邻接阵mat,不相邻点边权0
4 //可以有自环与重边,分为无向图和有向图
5 #define MAXN 100
6 void find_path_u(int n,int mat[][MAXN],int now,int& step,int* path){
7 int i;
8 for (i=n-1;i>=0;i--)
9 while (mat[now][i]){
10 mat[now][i]--,mat[i][now]--;
11 find_path_u(n,mat,i,step,path);
12 }
13 path[step++]=now;
14 }
15 void find_path_d(int n,int mat[][MAXN],int now,int& step,int* path){
16 int i;
17 for (i=n-1;i>=0;i--)
18 while (mat[now][i]){
19 mat[now][i]--;
20 find_path_d(n,mat,i,step,path);
21 }
22 path[step++]=now;
23 }
24 int euclid_path(int n,int mat[][MAXN],int start,int* path){
25 int ret=0;
26 find_path_u(n,mat,start,ret,path);
27 // find_path_d(n,mat,start,ret,path);
28 return ret;
29 }