Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用位掩码在HOLD karp算法中迭代所有可能的起始位置_Javascript_Algorithm_Bit Manipulation_Graph Algorithm_Bit Shift - Fatal编程技术网

Javascript 使用位掩码在HOLD karp算法中迭代所有可能的起始位置

Javascript 使用位掩码在HOLD karp算法中迭代所有可能的起始位置,javascript,algorithm,bit-manipulation,graph-algorithm,bit-shift,Javascript,Algorithm,Bit Manipulation,Graph Algorithm,Bit Shift,我感兴趣的是基于在javascript中找到的C实现实现Hold-karp算法。但是,此实现仅使用单个起始位置。我尝试了许多方法来移动所有起始位置(图中的所有节点),但是,由于实现使用位掩码作为访问节点集,起始位置1和0不会在每次调用函数solve时改变,因为0&anynumber始终为0 function tsp_hk(dist){ let n = dist.length; let opt = []; //array [endPoint][set] representing t

我感兴趣的是基于在javascript中找到的C实现实现Hold-karp算法。但是,此实现仅使用单个起始位置。我尝试了许多方法来移动所有起始位置(图中的所有节点),但是,由于实现使用位掩码作为访问节点集,起始位置1和0不会在每次调用函数solve时改变,因为
0&anynumber
始终为0

function tsp_hk(dist){
    let n = dist.length;
    let opt = []; //array [endPoint][set] representing the optimum paths
    //Initialize array values
    for(let i = 0; i < n; i++){
        opt[i] = [];
        opt[i][1 << (i)] = dist[i][n-1];
    }

    function solve(set, end){
        if(opt[end][set] === undefined){
            let R = set & ~(1 << end);
            let minv = 99999;
            for (let i = 0; i < n; i++){
                if(!(R & (1 << i))) continue;
                let s = solve(R, i);
                let v = s + dist[i][end];
                if(v < minv) minv = v;
            }
            opt[end][set] = minv;
        }
        return opt[end][set];
    }
    let bestlen = 99999;  
    let N = (1 << (n-1))-1;
    for(let t = 0; t < n-1; t++){
        let s = solve(N,t);
        let len = s + dist[t][n-1];
        if(len < bestlen) bestlen = len;
    }

    return bestlen;
}
tsp_香港功能区{
设n=距离长度;
让opt=[];//表示最佳路径的数组[endPoint][set]
//初始化数组值
for(设i=0;i选择[i][1如果第一个节点是节点0,并且希望节点2作为起始节点,则只需交换第0行和第2行,以及第0列和第2列。修改邻接矩阵,而不是修改算法