0
/ \
1 - 2
老师,以上图为例,0, 1, 2组成了三角形,是欧拉回路. 然后按照视频中的代码逻辑来走:
int curv=0
stack.push(curv) // 此时栈中 [0]
while( !stack.empty() ){
if(g.degree(curv)!= 0){
stack.push(curv) // 将当前curv压入栈中
int w = g.adj(curv).iterator().next(); // 遍历curv相仿的下一个顶点
g.removeEdge(curv, w); // curv, w间的边删除
curv=w; // 将邻居w点赋予为curv
}else{
res.add(curv); // 结果数组中添加curv
curv = stack.pop(); // curv赋为接下来的栈顶顶点
}
}
在while循环中:
1: curv=0, stack:[0, 0]
2: w=1, 删除0-1
0
\
1 - 2
3: curv = 1, stack: [0, 0, 1]
4: w = 2, 删除 1 - 2
0
\
1 2
5: curv = 2, stack: [0, 0, 1, 2]
6: w = 0, 删除 2 - 0
0
1 2
7: curv = 0 此时 g.degree(w) == 0
8: res: [0], curv = 2
9: res: [0, 2], curv = 1
10: res: [0, 2, 1], curv = 0
11: res: [0, 2, 1, 0], curv = 0
12: res:[0, 2, 1, 0, 0]
---------------
我是前端程序员:), 就是最终结果数组中 0这个点会出现 3次,我是看是java的逻辑自己模拟出来的哈,上述是我的一个思路过程,所以我认为之所以会出现3个0,是因为while前stack先把curv=0压入了一遍:), 不知道我说的对不对,老师你看看哈