求助一个算法

写一个js代码 随机100个数字 0-2 10*10 矩阵 每行有10个 有10行 每行不能有三个相邻 每列也不能三个相邻

看看ai写的 :joy_cat:

function generateMatrix() {
const size = 10; // 10x10 矩阵
const matrix = Array.from({ length: size }, () => Array(size).fill(0));
function isValid(matrix, x, y, value) {
// 检查行的三个连续数字
if (y >= 2 && matrix[x][y - 1] === value && matrix[x][y - 2] === value) return false;
if (y < size - 2 && matrix[x][y + 1] === value && matrix[x][y + 2] === value) return false;
if (y >= 1 && y < size - 1 && matrix[x][y - 1] === value && matrix[x][y + 1] === value) return false;

    // 检查列的三个连续数字
    if (x >= 2 && matrix[x - 1][y] === value && matrix[x - 2][y] === value) return false;
    if (x < size - 2 && matrix[x + 1][y] === value && matrix[x + 2][y] === value) return false;
    if (x >= 1 && x < size - 1 && matrix[x - 1][y] === value && matrix[x + 1][y] === value) return false;

    return true;
}

for (let x = 0; x < size; x++) {
    for (let y = 0; y < size; y++) {
        let validValues = [0, 1, 2]; // 候选值
        let placed = false;

        while (validValues.length > 0) {
            const value = validValues.splice(Math.floor(Math.random() * validValues.length), 1)[0];
            if (isValid(matrix, x, y, value)) {
                matrix[x][y] = value;
                placed = true;
                break;
            }
        }

        if (!placed) {
            // 回溯(重新生成当前行)
            matrix[x].fill(0);
            y = -1; // 重新开始当前行
        }
    }
}

return matrix;}

// 打印结果
const matrix = generateMatrix();
matrix.forEach(row => console.log(row.join(" ")));

AI 写的不行 不会直接卡的黑屏哪里

你想做开心消消乐?直接搜开心消消乐教程看看

开心消消乐算法

给你一个思路,生成全部是3-5个横列相邻的矩阵,就是可以全部消掉的数据,然后在随机偏位其中一个打乱

getBlockIndex(row : number , column : number){

    let arr : number[] = [1,2,3,4];

    let count;

    let index;

    if(row != 0){

        count = 0;

        index = 0;

        for(let i = row - 1; i >= 0; -- i){

            //向下找

            if(this.checkArr[i][column] != 0){

                if(index == 0){

                    count ++ ;

                    index = this.checkArr[i][column];

                }else{

                    if(this.checkArr[i][column] == index){

                        count ++ ;

                    }else{

                        break;

                    }

                }

            }else{

                break;

            }



        }

        if(count >= 2){

            arr.splice(arr.indexOf(index),1);

        }

    }

    if(column != 0){

        count = 0;

        index = 0;

        for(let i = column - 1; i >= 0 ; -- i){

            if(this.checkArr[row][i] != 0){

                if(index == 0){

                    count ++ ;

                    index = this.checkArr[row][i];

                }else{

                    if(this.checkArr[row][i] == index){

                        count ++ ;

                    }else{

                        break;

                    }

                }

            }else{

                break;

            }

        }

        if(count >= 2){

            arr.splice(arr.indexOf(index),1);

        }

    }

    return arr;

}

自己写的三消生成逻辑,可以参考一下

统一回复啊 解决了

首先 创建一个数组0,1,2

我就是简单判断 上两个的 如果是一样的会删除 在数组中相同的
只要判断上和左就可以也是 i-1,i-2 和i-10 ,i-20