void find_path_u(int n,int mat[][MAXN],int now,int& step,int* path){ int i; for (i=n-1;i>=0;i--) while (mat[now][i]){ mat[now][i]--,mat[i][now]--; find_path_u(n,mat,i,step,path); } path[step++]=now; }
//欧拉回路 + 邻接阵 O(n^2) //求欧拉回路或欧拉路 //返回路径长度,path返回路径(有向图时得到的是反向路径) //可以有自环与重边,分为无向图和有向图 void find_path_u(int n, int mp[][N], int now, int &step, int *path) { for (int i = n - 1; i >= 0; i--) { while (mp[now][i]) { mp[now][i]--; mp[i][now]--; find_path_u(n, mp, i, step, path); } } path[step++] = now; }
int euclid_path(int n,int mat[][MAXN],int start,int* path){ int ret=0; find_path_u(n,mat,start,ret,path); // find_path_d(n,mat,start,ret,path); return ret; }
int euclid_path(int n, int mp[][N], int start, int *path) { int ret = 0; find_path_u(n, mp, start, ret, path); //find_path_d(n, mp, start, ret, path); return ret; }