寻找在JavaScript中创建路径以获取最大捕获的更好方法

时间:2018-09-19 17:52:05

标签: javascript graph-algorithm breadth-first-search

我已经进行了一个星期的算法研究,我成功地制作了一种算法来创建捕获对手棋子的路径,然后在8x8板上找到最大捕获路径。

我创建了以下移动捕获的数组。 Captures

var moves = [[37 , 69] , [69 , 101] , [ 101 , 99] , [69 ,71], [ 69 , 67] , [67 , 99] , [99 , 101] ,  [71 ,103] ]

注意:无法分别捕捉到黑色。

这里我不知道终点,所以这就是为什么我可以使用搜索算法(例如BFS,DFS等)的原因

所以我决定首先找到所有可能的捕获,这些捕获现在已添加到硬编码的moves数组中。

然后创建了创建路径的算法,但是算法的复杂性要高得多,但是我需要更好的算法才能完成同样的工作。

这是我的算法

var getPaths = GetPaths(moves);
function GetPaths(moves) {
    var paths = [];
    for (var x = 0 ; x < moves.length ; x++) {
        var path = [];
        for (var y = x + 1 ; y < moves.length ; y++) {
            if (moves[x][1] == moves[y][0]) {
                if (!(path.includes(moves[x]))) {
                    path.push(moves[x]);
                }
                var data = [moves[y][0], moves[y][1]];
                path.push(data);
            }
        }
        if (path.length > 0) paths.push(path);



    }

    var newpaths = [];

    var nextRow = paths[0];
    var len = paths.length;


    for (var h = 1 ; h < nextRow.length; h++) {

        for (var j = 1 ; j < len ; j++) {
            var newpath = [];
            if (isInArray(nextRow[h], paths[j][0])) {

                newpath.push(nextRow[0]);
                var nextfound = false;
                for (var k = j + 1 ; k < paths.length ; k++) {
                    if (isInArray(paths[j][paths[j].length - 1], paths[k][0])) {
                        newpath.push(paths[j][0]);
                        if (paths[k][0][0] - paths[k][0][1] != -(paths[k][1][0] - paths[k][1][1])) {
                            newpath.push(paths[k]);
                        } else {
                            newpath.push(paths[k][0]);
                        }

                        nextfound = true;
                    }

                }
                if (!nextfound) {
                    newpath.push(paths[j]);
                }

            }
            if (newpath.length > 0) {
                newpaths.push(newpath);
            }
        }

    }

    return newpaths;
}

var maxPath = FindMaximumCapture(getPaths);
function FindMaximumCapture(totalPaths) {
    var max = totalPaths[0].toString().length;

    var index = 0;
    for (var count = 1 ; count < totalPaths.length ; count++) {
        if (max < totalPaths[count].toString().length) {
            max = totalPaths[count].toString().length;
            index = count;
        }
    }
    return totalPaths[index];
}
function isInArray(value, array) {
    return array.indexOf(value[0]) > -1 && array.indexOf(value[1]) > -1;
}

这是JSFiddle中的代码链接

0 个答案:

没有答案