一种五子棋棋盘的数组表示

000102030405060708090A0B0C0D0E0F 
101112131415161718191A1B1C1D1E1F 
202122232425262728292A2B2C2D2E2F 
303132333435363738393A3B3C3D3E3F 
404142434445464748494A4B4C4D4E4F 
505152535455565758595A5B5C5D5E5F 
606162636465666768696A6B6C6D6E6F 
707172737475767778797A7B7C7D7E7F 
808182838485868788898A8B8C8D8E8F 
909192939495969798999A9B9C9D9E9F 
A0A1A2A3A4A5A6A7A8A9AAABACADAEAF 
B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF 
C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF 
D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF 
E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF 
F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF 
G0G1G2G3G4G5G6G7G8G9GAGBGCGDGEGFGG

1.G0-GG表示0x100-0x110.

2.绿色部分为棋盘部分,红色为虚拟边框,蓝色部分不做编码处理。

定义成数组就是

byte  Position[273] = 
{
1111111111111111
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
1000000000000000
11111111111111111
};

这样做的好处:

1.带有边框的棋盘数组可以避免评估局面时的边界判断。

2.图中有一部分格子没有做编码处理,这样每行就恰好有16个元素,在根据格子编号取得行号和列号时就可以用移位操作代替除法操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值