Matrix邻居C Code

时间:2016-01-11 16:17:43

标签: c matrix

#define boyut 24

void rasgele_matris(int dizi[][boyut])
{

    srand(time(NULL)); //sistem satine göre random sayı üretecek.

    int i, j;
    for (i = 0; i < boyut; i++)
        for (j = 0; j < boyut; j++)
        { 

            int rasgele = rand() % 2;
            dizi[i][j] = rasgele;
        }
}

我想在我的矩阵中计算邻居。例如,对于dizi [2] [2] indis邻居[1] [1],[1] [2],[1] [3],[2] [1],[2] [3],[3] [1],[3] [2],[3] [3]需要所有邻居的indis值求和。怎么做?

1 个答案:

答案 0 :(得分:0)

关于此问题,有很多关于堆栈溢出的帖子。 这里有一个很好的答案:efficient neighbours,即使问题有一个java标记,该答案的代码在C中也可以正常工作。

这是一个实际的实现:

#include<stdio.h>
#define MIN_X 0
#define MIN_Y 0
#define MAX_X 2
#define MAX_Y 2
int main()
{
  int sum=0;
  int grid[3][3] = {{1,1,1},{1,1,1},{1,1,1}};

  for(int i=0;i<3;i++)
    {
      for(int j=0;j<3;j++)
    {
      int thisPosX=i;
      int thisPosY=j;
      int startPosX = (thisPosX - 1 < MIN_X) ? thisPosX : thisPosX-1;
      int startPosY = (thisPosY - 1 < MIN_Y) ? thisPosY : thisPosY-1;
      int endPosX =   (thisPosX + 1 > MAX_X) ? thisPosX : thisPosX+1;
      int endPosY =   (thisPosY + 1 > MAX_Y) ? thisPosY : thisPosY+1;

      for(int rowNum=startPosX; rowNum<=endPosX; rowNum++)      
        for(int colNum=startPosY; colNum<=endPosY; colNum++)          
          sum+=grid[rowNum][colNum];    

      sum=sum-grid[i][j];
      printf("%d ",sum);
      sum=0;
    }
    putchar('\n');
    }
  return 0;
}