SOURCE

console 命令行工具 X clear
> 初始化,长度=4,访问列表=0,0,0,0,矩阵=0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,访问下标=0,访问标志=0,0,0,0
> while,访问列表=0,0,0,0,顶点=1,访问标志=1,0,0,0
> -->,访问列表=0,1,0,0,顶点=1,访问标志=0,是否连通=1
> 0-1 连通 未记录
> 记录,顶点=1,访问列表=0,1,0,0
> while,访问列表=0,1,0,0,顶点=2,访问标志=1,1,0,0
> -->,访问列表=0,1,1,0,顶点=2,访问标志=1,是否连通=0
> -->,访问列表=0,1,2,0,顶点=2,访问标志=0,是否连通=1
> 1-2 连通 未记录
> 记录,顶点=2,访问列表=0,1,2,0
> while,访问列表=0,1,2,0,顶点=3,访问标志=1,1,1,0
> -->,访问列表=0,1,2,1,顶点=3,访问标志=1,是否连通=1
> -->,访问列表=0,1,2,2,顶点=3,访问标志=1,是否连通=0
> -->,访问列表=0,1,2,3,顶点=3,访问标志=0,是否连通=1
> 2-3 连通 未记录
> 找到回路,[0,1,2,3]
>
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>