2016-03-16 38 views
0

我試圖找到確定一個元素是否與未排序的二維數組中的另一個元素相鄰的最佳方法。例如,如果將myArray [2,2]傳遞給我的比較函數,我希望輸入等於位置[1,2],[3,2],[2,1]和[2,3]處的元素。返回true,以及任何其他輸入返回false。這是基於用戶輸入的。如何確定2個元素是否在2D陣列中相鄰?

array example

例如,假定目標值 「13」 存儲在[2,2]。如果用戶輸入「8」,則在數組中搜索在位置[1,2]處找到的值「8」。由於這與[2,2]的目標值相鄰,所以返回一個真值。

我想出了一個功能來做到這一點,但我不禁覺得我忽視了比我當前使用的條件更高效/更優雅的方式。我是C的新手,請原諒任何錯誤。

目前,我使用下面的函數:

_Bool withinOneOf(int x1, int y1, int x2, int y2) //compare x,y of first array element to x,y of second array element 
{ 
    _Bool xtrue = 0, ytrue = 0; 

    if(x1 == x2+1 || x1 == x2-1) 
    { 
     xtrue = 1; 
    } 

    if(y1 == y2+1 || y1 == y2-1) 
    { 
     ytrue = 1; 
    } 

    if(((x1==x2) && ytrue) || ((y1==y2) && xtrue)) //only want tiles that are adjacent vertically and horizontally, 
    {            //not diagonally. 
     return 1;       
    } 
    else 
    {       
     return 0;     
    } 
} 

回答

3

這是更少的代碼來計算下Manhattan metric的距離,並檢查是否等於1:

return (abs(x1 - x2) + abs(y1 - y2)) == 1; 
相關問題