19.2 Design an algorithm to figure out if someone has won in a game of tic-tac-toe.
class TicTacToe { enum Tic { X, O } // Given TicTacToe map, wheter t has won the game. // Assume map is a not-null 3*3 matrix, containing no null elements. // // check row, check column, check corner // This is a brute force solution. boolean checkRow(T[][] map, int r, T t) { for (int i = 0 ; i < 3 ; i ++) { if (map[r][i] != t) return false; } return true; } boolean checkColumn(T[][] map, int c, T t) { for (int i = 0 ; i < 3 ; i ++) { if (map[i][r] != t) return false; } return true; } boolean checkCornerLeft(T[][] map, T t) { for (int i = 0 ; i < 3 ; i ++) { if (map[i][i] != t) return false; } return true; } boolean checkCornerRight(T[][] map, T t) { for (int i = 0 ; i < 3 ; i ++) { if (map[2 - i][i] != t) return false; } return true; } boolean won(T[][] map, T t) { // Only check first row and first column for (int i = 0 ; i < 3 ; i ++) { if (checkRow(map, i, t)) return true; if (checkColumn(map, i, t)) return true; } checkCornerLeft(map, t); checkCornerRight(map, t); return false; } // A second option is that. // There is 9 positions, each position has 2 choices. // Thus, totally there are 2^9 conditions. // Use bit map to represents these 2^9. // If won, mark it as 1. // Check some one won‘ only needs O(1) }
时间: 2024-10-24 08:37:07