题目:
设计一个算法,判断玩家是否赢了井字游戏。
分析:
就是判断一个N*N矩阵,是否存在一行,一列,两对角线上元素全部相等。
package cci.section17; public class CCI_17_2 { public static int hasWon(int[][] board){ int N = board.length; //行 for(int i=0; i<N; i++){ if(board[i][0] != 0){ int j; for(j=0; j<N; j++){ if(board[i][j] != board[i][0]) break; } if(j==N) return board[i][0]; } } //列 for(int j=0; j<N; j++){ if(board[0][j] != 0){ int i; for(i=0; i<N; i++){ if(board[i][j] != board[0][j]) break; } if(i==N) return board[0][j]; } } //正对角 if(board[0][0] != 0){ int i; for(i=1; i<N; i++){ if(board[i][i] != board[0][0]) break; } if(i==N) return board[0][0]; } //负对角 if(board[N-1][0] != 0){ int i; for(i=1; i<N; i++){ if(board[N-i-1][i] != board[N-1][0]) break; } if(i==N) return board[N-1][0]; } return 0; } public static void main(String[] args) { //0代表空,1代表白棋,2代表黑棋 int[][] board = { {1,2,0,1}, {1,0,2,0}, {1,0,0,2}, {1,0,2,0} }; System.out.println(hasWon(board)); } }