Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 在网格中查找包含特定单元格的对角线_Javascript_Arrays_Algorithm - Fatal编程技术网

Javascript 在网格中查找包含特定单元格的对角线

Javascript 在网格中查找包含特定单元格的对角线,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,假设我们有一个包含单元格的网格,我们想要返回两个数组,其中每个数组都包含与该单元格成对角线的所有单元格,从左到右下,再返回一个相反的数组。最好的办法是什么 我在javascript中尝试了以下内容(请注意,board是一个一维数组,据说它代表一个边长为boardSize的正方形网格,position是我试图找到其对角线的单元格。) 对角线上的单元格顺序重要吗?如果不是,那么这个伪代码中的算法就足够了。如果这真的很重要,您只需要重新排列一些块并使用循环变量 getDiagonals(x, y) {

假设我们有一个包含单元格的网格,我们想要返回两个数组,其中每个数组都包含与该单元格成对角线的所有单元格,从左到右下,再返回一个相反的数组。最好的办法是什么

我在javascript中尝试了以下内容(请注意,
board
是一个一维数组,据说它代表一个边长为
boardSize
的正方形网格,position
是我试图找到其对角线的单元格。)


对角线上的单元格顺序重要吗?如果不是,那么这个伪代码中的算法就足够了。如果这真的很重要,您只需要重新排列一些块并使用循环变量

getDiagonals(x, y) {

    Set<Cell> diagonal1;
    Set<Cell> diagonal2;

    diagonal1.add(board[x][y]); //manually add center cell to both diagonals
    diagonal2.add(board[x][y]);

    //Sweep forwards, adding higher cells to diag1 and lower cells to diag2
    for(int i=1; x+i < board.size(); i++) { //board.size() for 'horizontal' size
        if(y-i >= 0) diagonal1.add(board[x+i][y-i]);
        if(y+i < board[0].size()) diagonal2.add(board[x+i][y+i]); //board[0].size for 'vertical' size
    }

    //Sweep backwards, adding higher cells to diag2 and lower cells to diag1
    for(int i=1; x-i >= 0; i++) {
        if(y-i >= 0) diagonal2.add(board[x-i][y-i]);
        if(y+i < board[0].size()) diagonal1.add(board[x-i][y+i]);
    }

    return (diagonal1, diagonal2);
}
getDiagonals(x,y){
设置对角线1;
设置对角线2;
对角线1.添加(board[x][y]);//手动将中心单元格添加到两条对角线
对角线2.添加(板[x][y]);
//向前扫掠,将较高的单元格添加到diag1,将较低的单元格添加到diag2
对于(inti=1;x+i=0)对角线1.加(板[x+i][y-i]);
如果(y+i=0;i++){
如果(y-i>=0)对角线2.添加(板[x-i][y-i]);
如果(y+i
对角线中单元格的顺序重要吗?如果不是,那么这个伪代码中的算法就足够了。如果这真的很重要,您只需要重新排列一些块并使用循环变量

getDiagonals(x, y) {

    Set<Cell> diagonal1;
    Set<Cell> diagonal2;

    diagonal1.add(board[x][y]); //manually add center cell to both diagonals
    diagonal2.add(board[x][y]);

    //Sweep forwards, adding higher cells to diag1 and lower cells to diag2
    for(int i=1; x+i < board.size(); i++) { //board.size() for 'horizontal' size
        if(y-i >= 0) diagonal1.add(board[x+i][y-i]);
        if(y+i < board[0].size()) diagonal2.add(board[x+i][y+i]); //board[0].size for 'vertical' size
    }

    //Sweep backwards, adding higher cells to diag2 and lower cells to diag1
    for(int i=1; x-i >= 0; i++) {
        if(y-i >= 0) diagonal2.add(board[x-i][y-i]);
        if(y+i < board[0].size()) diagonal1.add(board[x-i][y+i]);
    }

    return (diagonal1, diagonal2);
}
getDiagonals(x,y){
设置对角线1;
设置对角线2;
对角线1.添加(board[x][y]);//手动将中心单元格添加到两条对角线
对角线2.添加(板[x][y]);
//向前扫掠,将较高的单元格添加到diag1,将较低的单元格添加到diag2
对于(inti=1;x+i=0)对角线1.加(板[x+i][y-i]);
如果(y+i=0;i++){
如果(y-i>=0)对角线2.添加(板[x-i][y-i]);
如果(y+i
自己编码:

想法:

1) 将电路板实现为二维阵列

(数组a[3][3]的示例,以数组索引的形式给出)

2) 查找元素在数组中的位置。比如说在位置a[1][1],当我们在程序中找到它时,我们得到它的形式是[i][j],其中i=1,j=1

3) 要获得对角线1,请获取位置a[i-1][j-1]处的值,直到i=0和j=0。和位置a[i+1][j+1]处的值,直到达到数组边界,在本例中为3

4) 要获取对角线2,请获取位置a[i-1][j+1]处的值,直到达到数组边界;获取位置a[i+1][j-1]处的值,直到达到数组边界。

自己编写代码:

想法:

1) 将电路板实现为二维阵列

(数组a[3][3]的示例,以数组索引的形式给出)

2) 查找元素在数组中的位置。比如说在位置a[1][1],当我们在程序中找到它时,我们得到它的形式是[i][j],其中i=1,j=1

3) 要获得对角线1,请获取位置a[i-1][j-1]处的值,直到i=0和j=0。和位置a[i+1][j+1]处的值,直到达到数组边界,在本例中为3


4) 若要获取对角线2,请获取位置a[i-1][j+1]处的值,直到达到数组边界,并获取位置a[i+1][j-1]处的值,直到达到数组边界。

问题描述不清楚,示例代码中有错误,例如不明显的未定义变量
对角线
位置
,而
网格
的def不显示。将示例代码重写为一个过程,列出所有def,或作为一个完整的程序,并实际说出“执行任务”的含义。问题描述不清楚,示例代码中有错误,例如不明显的未定义变量
对角线
位置
,并且未显示
网格
的def。将示例代码重写为一个过程,列出所有def,或者作为一个完整的程序,并实际说出“完成工作”的含义。
getDiagonals(x, y) {

    Set<Cell> diagonal1;
    Set<Cell> diagonal2;

    diagonal1.add(board[x][y]); //manually add center cell to both diagonals
    diagonal2.add(board[x][y]);

    //Sweep forwards, adding higher cells to diag1 and lower cells to diag2
    for(int i=1; x+i < board.size(); i++) { //board.size() for 'horizontal' size
        if(y-i >= 0) diagonal1.add(board[x+i][y-i]);
        if(y+i < board[0].size()) diagonal2.add(board[x+i][y+i]); //board[0].size for 'vertical' size
    }

    //Sweep backwards, adding higher cells to diag2 and lower cells to diag1
    for(int i=1; x-i >= 0; i++) {
        if(y-i >= 0) diagonal2.add(board[x-i][y-i]);
        if(y+i < board[0].size()) diagonal1.add(board[x-i][y+i]);
    }

    return (diagonal1, diagonal2);
}
00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33