上海先锋商泰面试题

liuguangliang 2006-11-05 09:37:36
围棋去子程序。当白子把黑子围住时,黑子就要被拿掉。

我实现在算法思想,用一个二维数组qipan[][]来表示棋子的情况,0表示空,1表示白子,2表示黑子;用一个二维数组flag[][]来表示第i行,第j列棋子所对应的标志情况,flag[][]初始化都为0。
从左到右,由上到下进行第一遍遍历,当qipan[i][j]=2时,如果它的上面,和左面的棋子都为白子,那么flag[i][j]=flag[i][j]+1;如果它左面一个白子,上面一个黑子时,那么flag[i][j]=flag[i][j-1];如果它左面一个黑子,上面一个白子时,那么flag[i][j]=flag[i-1][j];如果它上面和左面都为黑子时,那么flag[i][j]=min(flag[i-1][j],flag[i][j]).然后再从右到左,由下向上遍历一遍qipan,原理于上面差不多,当flag[i][j]=2时,qipan[i][j]=0;//去子。
...全文
1483 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
JAVA_WEB 2006-11-06
  • 打赏
  • 举报
回复
围棋去子程序:

显然用回朔方法来分析。
当每次下子时,就检查该棋子所牵连的周围棋子的围住或被围住的情况。(不用从头遍历了)

例如:下白子,白子连通2个白子,这2个白子又连通4白子。。。这样遍历过去,不通的话,回朔回来,继续遍历,形成回路时就吃掉黑子。
rumlee 2006-11-06
  • 打赏
  • 举报
回复
JAVA_WEB(不停地往上爬) 的算法是可以的,不过没有考虑到一种情况,就是像虚竹这种人,自己杀死自己的,你没有考虑到。你只考虑到了杀死对方时候的情况。
snow7725 2006-11-06
  • 打赏
  • 举报
回复
围棋去子程序:

显然用回朔方法来分析。
当每次下子时,就检查该棋子所牵连的周围棋子的围住或被围住的情况。(不用从头遍历了)

例如:下白子,白子连通2个白子,这2个白子又连通4白子。。。这样遍历过去,不通的话,回朔回来,继续遍历,形成回路时就吃掉黑子。

这样好像还不太对,还应该考虑下哪个地方可以下子,哪个地方不能下子的吧。
liuguangliang 2006-11-06
  • 打赏
  • 举报
回复
insiku 2006-11-05
  • 打赏
  • 举报
回复
题目用意是这样吗?
会不会考虑到效率的问题
比如棋子越来越多的时候
meadking 2006-11-05
  • 打赏
  • 举报
回复
围棋呀??
牛!·!
xq_zhang 2006-11-05
  • 打赏
  • 举报
回复
up,希望高手关注!
lovetsfuer 2006-11-05
  • 打赏
  • 举报
回复
关注
liuguangliang 2006-11-05
  • 打赏
  • 举报
回复
大家多讨论一下
success_dream 2006-11-05
  • 打赏
  • 举报
回复
首先你要下过围棋,才能做题目!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧