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 }