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;
}
예제 #2
0
//欧拉回路 + 邻接阵 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;
}
예제 #4
0
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;
}