如何以编程方式获取二维数组中元素的相邻元素?

时间:2015-07-12 19:14:40

标签: c arrays algorithm

假设您有一个2D数组arr[N][N]。如果我给你一个输入arr[i][j],我应该得到左,右,上和下元素,即arr[i][j-1], arr[i][j+1], arr[i-1][j]arr[i+1][j]。 例如:Arr[3][3]= {1, 2, 3, 4, 5, 6, 7, 8, 9}

  • 输入:5
  • 输出:4,6,2,8
  • 输入:1
  • 输出:null,2,null,4

如何编写应考虑边界条件的程序?

2 个答案:

答案 0 :(得分:1)

所以你的程序由两部分组成:

  1. 查找输入是否存在于某个索引处。通过循环遍历数组找到它,如下所示:

    for( int i = 0; i < N; i++ ){
        for( int j = 0; j < N; j++ ){
             if(arr[i][j] == input) //produce output
        }
    }
    
  2. 制作输出。为简单起见,我将打印出来,但如果你的目标是一个返回输入数字周围值的函数,那么你应该malloc一个数组并将值复制到数组。要打印,首先检查我们是否在界限内,如果我们不在界限内,请不要尝试打印,否则会出现问题。

    for( int k = i - 1 ; k < i + 2; k++ ){
        for(int l = j - 1; l < j + 2; j++ ){
          if ( k > -1 && l > -1 && k < N && j < N ){ // check if in bounds
              printf("%i ", arr[k][l]);  
          }
        }
     }
    

答案 1 :(得分:0)

当您访问数组中的索引时,只需确保您没有访问无效索引,例如index < 0index > size。所以在你的情况下

    if(j > 0) System.out.println(a[i][j-1]);

    if(i > 0) System.out.println(a[i-1][j]);

    if(j < N-1) System.out.println(a[i][j+1]);

    if(i < N-1) System.out.println(a[i+1][j]);

如果您想在索引无效时返回null,只需为每个if添加in else部分。