求宝石迷阵获得可移动位置的算法,该如何解决

求宝石迷阵获得可移动位置的算法
我在做一个宝石迷阵的算法,现在的迷阵的布局如下,我应该如何做才可以获得可以移动的点,也就是获得这张地图上的[4,2]和[3,6]这2个点(红色标注)
{ 7, 4, 7, 4, 8, 6, 6, 5 },
{ 3, 6, 5, 3, 2, 7, 2, 3 }, 
{ 1, 8, 2, 4, 1, 8, 2, 4 },
{ 2, 4, 5, 6, 7, 2, 1, 2 }, 
{ 4, 4, 3, 4, 4, 3, 5, 5 },
{ 8, 3, 4, 2, 4, 7, 1, 1 }, 
{ 4, 5, 4, 2, 8, 2, 4, 5 },
{ 7, 3, 1, 6, 3, 2, 3, 1 }

想来半天也没想出好的办法,求各位大大指点下。

------解决方案--------------------
按照你的游戏规则规定的可消除移动动作来判断嘛。

最基本的最不考虑效率的算法可以这样:
C/C++ code
 遍历每一个位置[i, j]       <-----------------------------------------------------+
       |                                                                          |
       |                                                                          |
      \|/                                                                         |
方向 dir 循环 上 下 左 右   <-------------------------------------------------+   |
       |                                                                      |   |
      \|/                                                                     |   |
移动 dir 方位的值到当前位置                                                   |   |
       |                                                                      |   |
      \|/                                                                     |   |
判断当前位置与 dir 垂直方面没有三个以上连续同值的元素-------无----------------+   |
       |                                                                          |
       |                                                                          |
       | 有                                                                       |
       |                                                                          |
      \|/                                                                         |
此元素可移动并消除,跳出 dir 循环                                                 |
       |                                                                          |
       |                                                                          |
      \|/                                                                         |
判断是否还有位置没有遍历 --------------有-----------------------------------------+
       |  
       | 无
       |  
      \|/ 
     结束

------解决方案--------------------
虽然没细看,不过ls的字符画很好很强大

五子棋做过么,类似的处理啊,遍历每个点,看如果把这个点的上下左右的子交换过来,是不是能够有3子或更多子相连,不就可以了么
如果要优化一下可以遍历以后返回相连子数最多收益最大的方案

不是很清楚lz的疑惑在哪里啊~~~