2012-04-10 63 views
0

如何迭代四維鏈接的二維網格數據,就好像它是二維數組?如何迭代四維鏈接的二維網格數據,就好像它是二維數組?

我的網格結構是:

typedef bool tile; 

struct BLOCK; 
typedef struct BLOCK block; 

struct BLOCK { 
const block * to_the_left; 
const block * above; 
const block * to_the_right; 
const block * below; 

tile data; 
}; 

typedef struct { 
const block * start; 
} map; 

我需要能夠遍歷該柵格像它是一個2維陣列,所以我可以在屏幕上的起始塊定心上顯示的地圖的瓦片。

P.S.S.我最喜歡在C中看到一個解決方案(這就是我爲這個項目編寫的),C++,Haskell或Java代碼,因爲這些都是我熟悉的語言,但任何語言都可以。我只需要這個算法。

P.S.S.S.爲了清楚起見,通過迭代就像一個二維數組我的意思是我需要得到一個索引到x和y位置作爲變量。例如,我需要調用mvaddch(y,x,'#')。

回答

1

這將按照相同的順序進行迭代就好像它是一個2維陣列

BLOCK * process = upper_left_block; 
    BLOCK * leftmost = process; 
    while(true) 
    { 
     //<do stuff here> 
     process = process->to_the_right; 
     if(process == null) 
     { 
      process = leftmost->below; 
      leftmost = process; 
     } 
     if(process == null) 
      break; 
    } 
+0

加入的上面我需要解釋,我需要變量x和y,以及。 – 2012-04-10 23:18:59

+0

我正在調試這個,它幾乎可以工作,但在達到底部時不會停下來。我想我可以修復它。編輯:NVM。這是我生成網格的錯誤。 – 2012-04-10 23:40:49

+0

啊哈!我發現了錯誤。在設置process = leftmost-> below後,應該包含最左邊的= process的小行。雖然我不知道這個禮儀。如果我應該等待你改變線路,然後我會接受帖子,如果我應該編輯帖子並將其放入編輯隊列或者如果要做其他事情。 – 2012-04-11 00:09:33