連連看 演算法筆記

2022-02-01 09:10:49 字數 1128 閱讀 4088

這幾天都沒有更新blog,正在用休息時間編寫乙個連連看的小遊戲,目前已經完成,還在測試階段,準備加如點背景**和效果.測試完成後再發布遊戲;

象連連看這類遊戲,就是最短路徑求解,演算法要求如下:

乙個int 型別的2維陣列,定義為

public const int tilerowcount = 19;

public const int tilecolcount = 12;

int[,] map = new int[tilerowcount,tilecolcount];

map[x,y] 的位置如果為 0 ,表示可以通過,如果為 1 表示障礙物

定義起點座標和終點座標,尋找可以通過的路徑;並返回路徑經過的x/y位置,用100.

如 5 x 5 的矩陣:

0 0 0 0 0

0 0 0 0 0

0 0 1 0 0

0 0 1 0 0

0 0 0 0 0

設起點x/y座標為 0,0 ,終點座標為 3/3,那麼如下圖(*表示起點,+表示終點)

* 0 0 0 0

0 0 0 0 0

0 0 1 0 0

0 0 1 + 0

0 0 0 0 0

最終路徑應該是:

0,0 1,0 2,0 3,0 3,1 3,2 3,3

繪製成圖的路徑應該是如下(路徑用.表示)

* . . . 0

0 0 0 . 0

0 0 1 . 0

0 0 1 + 0

0 0 0 0 0

這樣算1個折點.

也可以是

0,0 0,1 0,2 0,3 0,4 1,4 2,4 3,4 3,3

* 0 0 0 0

. 0 0 0 0

. 0 1 0 0

. 0 1 + 0

. . . . 0

這樣是2個折點

很明顯路徑1的方式要更優;

那麼查處路徑之後,還必須選擇最優路徑,並且要控制路徑的折點在0到2之間,這個是遊戲的規則.

關於理解連連看的演算法,可以看看這個文章,這種判斷式理論上來說是比較容易的,但我採用的是迷宮求解的演算法,最後是根據統計折點來判斷是否可以成功連線,這樣可以擴充套件難易度;

連連看演算法

前幾天看了下a 演算法,發現並不能實現連連看。a 演算法是尋找最短路徑的一種高效率的演算法,而連連看的路徑並不一定是最短的。連連看的路徑最多只能轉折3次,因此判斷兩點的可延伸點是否有重複的,如果有,折為0或1 可消除,如果沒有,再判斷每個延伸點的延伸點與目標點的延伸點是否有重複的,有則表示可以消除並...

連連看演算法

分類判斷法 這裡實質上是一種遞迴的思想,要判斷a與b能否通過一條有n個轉角的路徑相連,可以轉化為判斷能否找到c,c與a能直線相連,且c與b能用一條有n 1個轉角的路徑相連。若這樣的c存在,那麼a與b就可以通過一條有n個轉角的路徑相連。根據轉角數不得超過2個的規則,我們可以分為轉角數分別為0個 1個 ...

《連連看》的演算法

連連看所要求的是 1 兩個目標是相同的 2 兩個目標之間連線線的折點不超過兩個。連線線由x軸和y軸的平行線組成 那麼分析一下連線的情況可以看到,一般分三種情況 1 直線相連 2 乙個折點 3 兩個折點 如圖 可以發現,如果有折點,每個折點必定有且至少有乙個座標 x或者y 是和其中乙個目標點是相同的,...