请教:类似于计算棋盘上棋子个数的算法问题。(10分)

  • 主题发起人 主题发起人 rebirth2003
  • 开始时间 开始时间
R

rebirth2003

Unregistered / Unconfirmed
GUEST, unregistred user!
有一类似于计算棋盘上棋子个数的问题.现描述如下:
假设,围棋的棋盘上全部摆满了黑白棋子,如何计算某一区域中所有连续的黑(白)棋子的个数?
示意图如下,如何计算以“●”为核心的区域中连续的“白”的个数?
黑黑黑黑黑黑黑黑白白白白白白白白白白白白黑黑黑黑黑黑黑黑黑黑黑黑
黑黑黑白白白白白白白白白白白白白白白白白白白白白白白白黑黑黑黑黑
黑黑黑黑黑黑白白白白白白白白白白白白白白白白白黑黑黑黑黑黑黑黑黑
黑黑黑白白白白白白白白白白白白白白黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑
黑黑黑白白白白白白白白白白白白白白白白白白白白白白白白黑黑黑黑黑
黑黑黑黑黑黑白白白白白白白白白白白白白白白白白黑黑黑黑黑黑黑黑黑
黑黑黑白白白白白白白白白白白白白白黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑
黑黑黑白白白白白白白●白白白白白白白白白白白白白白白白黑黑黑黑黑
黑黑黑黑黑黑白白白白白白白白白白白白白白白白白黑黑黑黑黑黑黑黑黑
黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑黑
 
"如何计算以“●”为核心的区域中连续的“白”的个数?"?
是什么意思?是要求一个正方形还是只要每行中连续?
我的想法是做一个二维数组,然后以给定的那个点的坐标在4个方向搜索就可以了。当然,这是一个递归过程,注意出口参数就可以了。
 
"计算以“●”为核心的区域中连续的“白”的个数", 可以这样理解:计算图中“●”和那些“白”的个数,“●”可以看作“白”。
 
假定棋盘不大:建立一个完全MATRIX,用一个二纬数组来表达,每个节点存贮两个内容:一个是是否已经被 遍历,另一个是是否符合条件
如果棋盘过大,则建立一个稀松的,其实就是一个坐标的数组,我们假定棋盘不太大
以某个X,Y为起点,以上下左右进行判断,该节点已经被遍历,则返回,否则设置上遍历标志(这个很重要),如果符合是白色的,则给节点设置上符合条件,并以此节点为起点调用该过程(递归)
这就可以得到白的符合条件的分布,当然也就统计出了其个数
 
这是典型的四连通区域的遍历问题,请参考我在下面帖子中的回答:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1023319
 
http://blog.163.com/gongyuzhuo
OK
 
后退
顶部