題目:
設計一個算法,判斷玩家是否贏了井字遊戲。
分析:
就是判斷一個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));
}
}