作者tkcn (小安)
看板java
標題Re: [問題] 關於附近點的判定
時間Wed Jun 16 15:23:13 2010
※ 引述《money1943 (小豬)》之銘言:
: 小弟要做一個 5*5的矩陣
: setLayout(new GridLayout(5, 5));
: 擺滿按鈕
: 已宣告好五個不重複的隨機變數int sum[5]
: 要做類似踩地雷的功能
: 如果想做到例如點是..
: 0 1 5 6 7(隨機)
後來終於看懂了,一開始沒把上面這串當成是位置。
雖然我看過很多人都習慣用一維陣列處理這種問題,
不過我覺得二維陣列比較容易理解 (也比較容易處理邊緣問題)
所以這裡就先轉成二維吧,因此上述五個座標就變成:
(0, 0) (0, 1)
(1, 0) (1, 1) (1, 2)
假設現在要找到 (x, y) 的八個 neighbors,
你可以直接宣告兩組陣列: (向量)
int[] dx = {0, -1, -1, -1, 0, 1, 1, 1};
int[] dy = {-1, -1, 0, 1, 1, 1, 0, -1};
// 依序分別是 上, 左上, 左, ..., 右上
把 (x, y) 分別和這些向量相加,你就可已達到八個 neighbors 的座標了。
通常在四相鄰的圖中我比較愛用上面的方式,
如果是八相鄰的話我通常會這樣用:
for(int dx=-1;dx<=1;dx++)
for(int dy=-1;dy<=1;dy++)
if(dx!=0 || dy!=0){
// do something ...
}
剩下來你唯一要注意的,就是如何處理超出邊界的問題了,good luck!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.50.250
※ 編輯: tkcn 來自: 61.230.50.250 (06/16 15:24)
推 slalala:我的做法 隱藏邊界 科科 06/16 17:57
推 PsMonkey:嘖嘖... 從來沒想過說 XDXD 06/16 21:43
→ tkcn:一起來參加 code jam 吧 (招手) 06/16 23:05
→ TonyQ:我一直以為這是標準作法...-.-;;當初寫題目的直覺 06/17 00:44
→ tkcn:那來個詭異的作法 XD 先初始一個向量然後用 rotation matrix 06/17 01:08
→ tkcn:如果是四相鄰的話,code 還蠻精簡的 06/17 01:10
推 spring0417:推圍牆 06/17 04:48