井字棋 二维数组java_[牛客习题]判断井字棋玩家是否获胜

本文介绍了一种用于判断井字棋游戏胜负的算法实现。通过遍历棋盘的每行、每列以及两条对角线,检查是否有连续相同的棋子出现来确定玩家是否获胜。该算法适用于计算机科学领域的游戏AI开发。

题目描述

给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。

测试样例:

[[1,0,1],[1,-1,-1],[1,-1,0]]

返回:true

题目分析

井字棋游戏规则,就是判断行、列以及对角线上的棋子是否全部相同

根据给定的二维数组,由于井字棋行和列相等,并且当前玩家的棋子为1, 只需计算某一行或者某一列的和为二维数组的行数,再判断两条对角线的和,如果有一个条件满足即玩家获胜。

在计算时,要注意每次统计每一行每一列,对角线的和时注意将sum置0,不然会被上次的计算结果干扰导致程序出错。

参考代码:

class Board {

public:

bool checkWon(vector > board) {

// write code here

int row = board.size();

int i, j, sum;

//行

for(i = 0; i < row; ++i)

{

sum = 0;

for(j = 0; j < row; ++j)

{

sum += board[i][j];

}

if(sum == row)

return true;

}

//列

for(i = 0; i < row; ++i)

{

sum = 0;

for(j = 0; j < row; ++j)

{

sum += board[j][i];

}

if(sum == row)

return true;

}

//对角线

sum = 0;

for(i = 0;i < row; ++i)

{

sum += board[i][i];

}

if(sum == row)

return true;

sum = 0;

for(i = 0; i < row; ++i)

{

sum += board[i][row-i-1];

}

if(sum == row)

return true;

return false;

}

};

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值