2016-03-25 96 views
-1

我無法確定如何在考慮角落&陣列邊緣的情況下識別下面我的代碼中列出的陣列中的1。陣列中的鄰居

#include <stdio.h> 
/* define grid size */ 
#define SIZE 7 
int grid[SIZE][SIZE]; 
/* function to find the number of occupied adjacent cells */ 
int neighbors (int i, int j); 
void main() 
{ 
    int i, j, n; 
/* initialize the entire grid to be zero */ 
for (i = 0; i < SIZE; i++) 
    for (j = 0; j < SIZE; j++) 
     grid[i][j] = 0; 
/* introduce a few ones */ 
    grid[1][2] = 1; 
    grid[2][2] = 1; 
    grid[1][4] = 1; 
    grid[2][4] = 1; 
    grid[3][2] = 1; 
    grid[3][3] = 1; 
    grid[3][4] = 1; 
    grid[5][3] = 1; 
    grid[6][2] = 1; 
for (i = 0; i < SIZE; i++) 
    for (j = 0; j < SIZE; j++) { 
     n = neighbors(i,j); 
     printf ("Number of neighbors to element %d,%d =%d\n",i,j,n); 
} 
return; 
} 
/* function to compute the neighbors */ 
int neighbors (int i, int j) 

我想,我可以使用if語句來修改密碼將如何運行,如果I = 0或I = 6,以及如果j = 0或j = 6,但我不知道如何繼續。任何幫助將不勝感激

+1

請縮進代碼在你的問題。 – jdarthenay

+0

另外7個已經超出了你的矩陣的範圍,我想在最後一句話中你的意思是「i == 1或i == 6,以及如果j == 1或者j == 6」 – jdarthenay

+0

@jdarthenay你是正確的,已經做出了相應的編輯 –

回答

0

有可能包裝直接訪問數組在抽象層。此圖層可以隱藏訪問邏輯和其他檢查。 喜歡的東西:

int get_grid(int i, int j) 
{ 
    if (i>=0 && i<SIZE) 
     return grid[i][j]; 
    return 0; 
} 

並調用函數:

int neighbors (int i, int j) 
{ 
    return get_grid(i-1, j-1) + get_grind(i-1, j) + ... 
} 
0

我建議:

int neighbors (int i0, int j0) 
{ 
    int imax = (i0 < SIZE) ? (i0 + 1) : SIZE; 
    int jmax = (j0 < SIZE) ? (j0 + 1) : SIZE; 
    int result = 0; 

    for (int i = (i0 > 0) ? (i0 - 1) : 0; i <= imax; i++) 
    { 
     for (int j = (j0 > 0) ? (j0 - 1) : 0; j <= jmax; j++) 
     { 
      if ((i != i0 || j != j0) && grid[i][j] != 0) 
      { 
       result++; 
      } 
     } 
    } 

    return result; 
} 
+0

什麼是C99模式?我還沒有知道,但我不確定如何編譯甚至測試代碼 –

+0

@Christian Littner我不知道爲什麼你問這個作爲我的答案的評論。 C99是一個更新的標準,使用'-std = C99'編譯選項可以讓你使用一些舊標準沒有啓用的代碼。 – jdarthenay