波波老师麻烦您了,欧拉回路问题

来源:10-4 求解欧拉回路的三种算法

慕仰0554757

2020-10-28

在这个图上找欧拉回路

void dfs(int i)         //这个点深度优先遍历过程寻找欧拉路
  {
      int j;
      for (j = 1; j <= n; j++)
        if (g[i][j] == 1)          //从任意一个与它相连的点出发
         {
              g[j][i] = g[i][j] = 0; 
              dfs(j);
          } 
      circuit[++circuitpos] = i;   //记录下路径
  }

问题1:我找了很多别人的欧拉回路算法,就是dfs这样的。解决不了上图的欧拉回路问题,这上面代码(网络上大部分都是这样的dfs)只是在某些图上可以找出欧拉回路,是不是错误代码?

void dfs(int i){
    for(int j=1;j<=n;j++){
        if(mapp[i][j]==1){
            mapp[i][j]=mapp[j][i]=0;  //从i点出发
			num[++c]=i;
            if (c==m) {       //遍历所有边
				pr(); 
			} 
			else dfs(j);
            mapp[i][j]=mapp[j][i]=1;   //回溯
            --c; 
        }
    }
    
}

我改进成这样对不对?

写回答

1回答

liuyubobobo

2020-10-28

我刚刚使用这个测试用例测试了一下这个课程 10-6 的代码,没有问题:https://git.imooc.com/coding-370/Play-with-Graph-Theory-Algorithm/src/master/10-Euler-Loop-and-Euler-Path/06-Hierholzer-Algorithm/src/EulerLoop.java 


如果你使用这个课程的代码测试这个测试用例有问题,请确认自己的图文件是正确的。因为你你的图中的顶点标号是从 1 开始的,但实际上我们的代码中的顶点是从 0 开始的。我的测试文件内容如下:

13 16
8 9
9 1
1 7
7 8
0 1
1 2
2 3
3 0
2 10
10 11
11 12
12 2
3 6
6 5
5 4
4 3


如果你在网上找到的代码针对这个测试用例结果是错误的,那肯定是错误的。


因为我没有你的这个程序的完整代码和相应的思路,我也不能确定是否是正确的,你需要自己进行测试。


加油!:)

1
1
慕仰0554757
非常感谢!
2020-10-28
共1条回复

玩转算法系列--图论精讲(Java版)

30+小时系统学习,bobo带你克服被图论支配的恐惧

1591 学习 · 324 问题

查看课程