码迷,mamicode.com
首页 > 其他好文 > 详细

CC150 19.2

时间:2014-12-10 14:26:06      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:interview

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)
}


CC150 19.2

标签:interview

原文地址:http://7371901.blog.51cto.com/7361901/1588264

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!