五子棋---五子相连判断

前言

最近在做一个五子棋游戏,发现其中的五子相连判断算法非常的好,所以总结出来给大家。

算法思路

我们大家都玩过五子棋,棋子在4方向直线上有五个子,那么就表示玩家得胜。4方向分别是横向,纵向,斜向上和斜向下。
棋子4个方向
如果棋手每下一步棋,我们遍历已经下的棋子,判断其4个方向是否够5个棋子,那么这样的效率是不高的。因为我们在下棋之前,那么我们可以知道,棋盘上一定没有5子相连,所以我们就不用去判断已经下的所有棋子,而是直接判断刚下的棋子4个方向的的情况。相对于判断所有棋子,我们这个方法更简单。
因为相邻棋子相差1个长度单位,所以:

  • 棋子横向 X轴 每次变化1,Y 轴不变;
  • 棋子纵向 X轴 不变,Y 轴每次变化1;
  • 棋子斜向上 X轴 每次变化1,Y 每次变化1;
  • 棋子斜向下 X轴 每次变化1,Y 每次变化1;
    以上4个方向,是x轴的正向,那么他们的反向也要同时计算。如果计算下一个步骤不是本棋手的棋子,那么本次方向的查询结束,接着查询反方向的棋子,如果总共的相邻棋子数大于等于5,那么棋手胜利,比赛结束。
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构习题:已知两人分别执白棋和黑棋在一个围棋棋盘上下五子棋,若同一颜色的棋在同一条横行、纵行或斜线上连成5个棋,则执该颜色棋的人获胜。编写程序读入某一时刻下棋的状态,并判断是否有人即将获胜,即:同一颜色的棋在同一条横行、纵列或斜线上连成4个棋,且该4个棋的两端至少有一端为空位置。 输入的棋盘大小是19×19,用数字0表示空位置(即没有棋),用数字1表示该位置下了一白色棋,用数字2表示该位置下了一黑色棋。假设同一颜色的棋在同一条横行、纵列或斜线上连成的棋个数不会超过4个,并且最多有一人连成线的棋个数为4。 【输入形式】 从控制台输入用来表示棋盘状态的数字0、1或2;每行输入19个数字,各数字之间以一个空格分隔,每行最后一个数字后没有空格;共输入19行表示棋盘状态的数字。 【输出形式】 若有人即将获胜,则先输出即将获胜人的棋颜色(1表示白色棋,2表示黑色棋),然后输出英文冒号:,最后输出连成4个棋连线的起始位置(棋盘横行自上往下、纵列自左往右从1开始计数,横行最小的棋在棋盘上的横行数和纵列数作为连线的起始位置,若在同一行上,则纵列数最小的棋位置作为起始位置,两数字之间以一个英文逗号,作为分隔符)。 若没有人获胜,则输出英文字符串:No。 无论输出什么结果,最后都要有回车换行符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值