CC150 19.2

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

CC150 19.2的相关文章

CC150 19.11

19.11 Design an algorithm to find all pairs of integers within an array which sum to a specified value. // Assume a is not null. // // a is not sorted. // // Option 1 is using a set. List<Pair<Integer, Integer>> sumUpTo(int[] a, int sum) {   /

CC150 19.1

// See http://www.hawstein.com/posts/19.1.html // 19.1 Write a function to swap a number in place without temporary variables. class CC19_1 { void swap() { int a; int b; a = a + b; b = a - b; a = a - b; } // or void swap() { int a; int b; a = a ^ b;

CC150 19.4

19.4 Write a method which finds the maximum of two numbers. You should not use if-else or any other comparison operator. int max(int a, int b) {   int[] temp = {a, b};      // If a > b, (a - b) >> 31 will be 0...000000;   // Else, it will be 1111

CC150 - 11.3

Question: Given a sorted array of n integers that has been rotated an unknown number of times, write code to find an element in the array. You may assume that the array was originally sorted in increasing order. 1 package POJ; 2 3 import java.util.Ar

CC150 - 11.2

Question: Write a method to sort an array of strings so that all the anagrams are next to each other. 1 package POJ; 2 3 import java.util.Arrays; 4 import java.util.Comparator; 5 import java.util.Hashtable; 6 import java.util.LinkedList; 7 import jav

Install Adobe Flash Player 11.2 on CentOS/RHEL 7/6/5, Fedora 20/19

Adobe Flash Player are very useful for watching videos in web browser online. Without flash player most of the videos will not play in your browser. This article will help you to install Adobe flash player plugin for your browsers in CentOS 6/5, Redh

Linux内核编译 Ubuntu 14.04.3 server 升级至3.19.8

读书笔记:<Linux内核设计与实现>,原书第3版,陈莉君 康华 译 第2章:从内核出发     2.3节:编译内核 实验: ============================================================ 系统环境:VM虚拟机 Ubuntu 14.04.3 LTS server版 任务:编译安装新的内核 注意:不要跨大版本,我在3.19版本内 耗时:2小时 所有版本的内核: https://www.kernel.org/pub/linux/kernel

【网络流24题】No.19 负载平衡问题 (费用流)

[题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input.txt517 9 14 16 4 输出文件示例output.txt11 [分析] 其实我觉得这题可以贪心啊..n^2贪心??.没细想.. 打的是费用流.. 大概这样建图: 懒得写了..凌乱之美.. 求满流费用.. 1 #include<cstdio> 2 #include<cstdlib&

java 19 - 9 finally有关的面试题

1 /* 2 * 面试题: 3 * 1:final,finally和finalize的区别 4 * final:最终的意思,可以修饰类,成员变量,成员方法 5 * 修饰类,类不能被继承 6 * 修饰变量,变量是常量 7 * 修饰方法,方法不能被重写 8 * finally:是异常处理的一部分,用于释放资源. 9 * 一般来说,代码肯定会执行,特殊情况:在执行到finally之前jvm退出了 10 * finalize:是Object类的一个方法,用于垃圾回收 11 * 12 * 2:如果catc