console
function hanmilton(n, x=[], c=[[]]){
let i = 0, k = 0, visited = [];
for(i = 0; i < n; i++){
x[i] = 0;
visited[i] = 0;
}
console.log('初始化','长度='+n,'访问列表='+x,'矩阵='+c,'访问下标='+k,'访问标志='+visited)
k = 0;
visited[0] = 1;
x[0] = 0;
k = k + 1;
while(k >= 0){
console.log('while','访问列表='+x,'顶点='+k,'访问标志='+visited)
x[k] = x[k] + 1;
while(x[k] < n){
console.log('-->','访问列表='+x,'顶点='+k,'访问标志='+visited[x[k]],'是否连通='+c[x[k-1]][x[k]])
if(visited[x[k]]==0 && c[x[k-1]][x[k]]==1){
console.log((k-1)+'-'+k+' 连通 未记录')
break;
}else{
x[k] = x[k] + 1;
}
}
//c[x[k]][0] == 1 最后的顶点连接第一个结点
if(x[k]<n && k == n-1 && c[x[k]][0] == 1){
console.log("找到回路", x);
return;
}else if(x[k]<n && k<n-1){
console.log("记录", '顶点='+k, '访问列表='+x);
visited[x[k]] = 1;
k = k+1;
}else{
console.log("回溯",'顶点='+k, '访问列表='+x);
x[k] = 0;
visited[x[k]] = 0;
k = k-1;
}
}
}
let ar = [[0,1,0,1],[1,0,1,0],[0,1,0,1],[1,0,1,0]];
hanmilton(4,[],ar)
<h1>算法-无向图连通图-哈密尔顿Hamilton回路</h1>