CareerCup 17中等难题 Q17.2 井字游戏

题目:

设计一个算法,判断玩家是否赢了井字游戏。

分析:

就是判断一个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));
	}
}


你可能感兴趣的:(井字游戏,Careercup)