Logic
向着梦想进发
Logic's Blog

【题解】3002五子棋

描述:

五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。游戏双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先在横、竖、斜方向形成五子连线者获胜。 (图) 现有一副五子棋残局存放在 10×10 棋盘中,试判断在某位置下入棋子后,能否获胜。

输入描述:

共十一行。 前十行输入五子棋残局,每行有10个空格间隔的整数。0代表空,1代表黑子,2代表白子。 第十一行有三个逗号间隔的整数i、j、k,表示在棋盘第i行j列下入棋子k。其中i、j∈[1,10],k∈[1,2]。

输出描述:

一行。 如果该位置已有棋子,输出“Error”;下子后不能获胜输出“No”,能获胜输出“Yes”。

输入样例:

输出样例:

二维列表的四个方向遍历

  1. 先横再竖

  1. 先竖再横

  1. 对角线

  1. 反对角线

  1. for example

运行结果:

  1. 为什么呢。。。

横竖遍历都很容易理解,那对角线要怎么遍历呢?

容易看出第i条对角线经过点(0,m-1-i)和(i,m-1)
所以有:Yi=Xi+m-1-i

容易看出第i条对角线经过点(0,i)和(i,0)
所以有:Yi=i-Xi

用坐标偏移实现八个方向的遍历

注意:当棋盘太大时(n,m>=1e3)时二维列表存不下整个棋盘,就不能用上文的四个方向遍历,而只能字典存有棋子的位置,只能用这种方法了

赞赏
本文作者: Logic
本文链接: https://i.needwe.top/3002%e4%ba%94%e5%ad%90%e6%a3%8b/
本文采用 CC BY-NC-SA 4.0 Unported 协议进行许可

发表回复

textsms
account_circle
email

Logic's Blog

【题解】3002五子棋
描述: 五子棋是全国智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏。游戏双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先在横、竖、斜方向形成五子连线者获…
扫描二维码继续阅读
2021-12-03