Description

Kim likes to play Tic-Tac-Toe.

Given a current state, and now Kim is going to take his next move. Please tell Kim if he can win the game in next 2 moves if both player are clever enough.

Here “next 2 moves” means Kim’s 2 move. (Kim move,opponent move, Kim move, stop).

Game rules:

Tic-tac-toe (also known as noughts and crosses or Xs and Os) is a paper-and-pencil game for two players, X and O, who take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three of their marks in a horizontal, vertical, or diagonal row wins the game.

Input

First line contains an integer T (1 ≤ T ≤ 10), represents there are T test cases.

For each test case: Each test case contains three lines, each line three string(“o” or “x” or “.”)(All lower case letters.)

x means here is a x

o means here is a o

. means here is a blank place.

Next line a string (“o” or “x”) means Kim is (“o” or “x”) and he is going to take his next move.

Output

For each test case:

If Kim can win in 2 steps, output “Kim win!”

Otherwise output “Cannot win!”

Sample Input

3
. . .
. . .
. . .
o
o x o
o . x
x x o
x
o x .
. o .
. . x
o

Sample Output

Cannot win!
Kim win!
Kim win! 
 
 
 
题目意思:这是一个三子相连获胜的游戏,不管是横竖斜相连,只要能够连成一条线即可,问Kim在给出的局势下先手是否能取得胜利。.代表双方没有下过棋,xo代表双方各自下的棋,先给t组样例,每一组样例包含一个3*3的矩阵棋盘,之后一个棋子代表着Kim下的棋。
 
解题思路:开始做的时候一点头绪都没有,看了看网上的题解大多都是暴力模拟,然而我同学找了找规律,a了这道题,开始我以为是后台样例太水才让他侥幸过了,不过后来我试了试很多样例,才明白后台的数据应该是按照两人正常博弈给出的,而不是随便乱给的数据。这里我们就来使用这种找规律的方法来分析一下这道题。
 
1.如果两人下的棋的步数小于2,也就是只下了一步或者还没有开始,那么肯定Kim是不可能在两步之内取得胜利的。还没有开始的话两步就算对方没有去阻拦也不够三个棋子,只走了一步,接下来的两步中对方一去阻拦,也不会连成一条线。
 
2.如果这时候步数大于等于2了,能否取得胜利的关键就是能否占领了最中间的位置或者在最中间的位置双方都没有下过棋。
 
如下样例
(1)这一种情况下大家都走了两步,但是Kim占领了最中间的位置,那么他下一步只要在占领左下角的位置,之后他就会有两条线可以三子相连不管另一个怎么样围堵,都能取得胜利。
                     
 
(2)这种情况在占领了最中间位置的情况下,只需要一步就能取胜,即下左下角那一步。
                         
 这种局势也是类似的
                        
 
                         
 
(3)在这种双方都没有占领最中间位置的情况下,先手会必胜,会有两种下法,1是占领最中间位置,2是占领其他位置构成两条会完成的三连线。
 
 
这种局势下占领最中间的位置,正负对角线会出现两条未完成的三连线,无论对方如何围堵,都会取得胜利。
                         
 
 
这种局势想要取得胜利就不能去占领最中间的位置了。
 
                                               
 
 
 
                                                   
 
 
                                                              
代码:

 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int i,j,k,l,m,n,t,q;
char a[][],b;
scanf("%d",&t);
for(l=;l<t;l++)
{
k=;q=;
for(i=;i<;i++)
for(j=;j<;j++)
scanf(" %c",&a[i][j]);
scanf(" %c",&b);
for(i=;i<;i++)
for(j=;j<;j++)
if(a[i][j]==b)
q++;
if(q<)
printf("Cannot win!\n");
else
{
if(a[][]==b||a[][]=='.')
printf("Kim win!\n");
else
printf("Cannot win!\n");
}
}
return ;
}

在这里有一个网站可以和人机玩一下这个游戏。

 http://www.calculatorcat.com/games/tic_tac_toe.phtml
 
对于这个游戏有几个结论:
1.先手只要经营得当一定会取得胜利。(一开始就占领最中间的位置)
可以这样理解先手一上来就为了构建有利于自己的局势,而后手的第一步并没有太大的意义即使是为了构建有利于自己的局势,但也还落后于先手,后面的局势还要疲于应对先手防范其三子相连,可以说一开始后手就落于下风。
 
2.如果让后手占领了最中间的位置,先手最多只能与其打平,而不会取得胜利。
中间位置对双方都很重要,中间位置对四面八方起着一个辐射的作用,占领中间意味着可以有多条未连接三子相连,即使对方封锁了其中的一条,但仍旧还有一条通路,可以说先手占领了最中间的位置可以说是利于不败之地了。而后手占领了中间位置,先手之前构筑的优势尽失,最多先手只能打平。
 

Tic-Tac-Toe的更多相关文章

  1. Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

    1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...

  2. POJ 2361 Tic Tac Toe

    题目:给定一个3*3的矩阵,是一个井字过三关游戏.开始为X先走,问你这个是不是一个合法的游戏.也就是,现在这种情况,能不能出现.如果有人赢了,那应该立即停止.那么可以知道X的步数和O的步数应该满足x= ...

  3. 【leetcode】1275. Find Winner on a Tic Tac Toe Game

    题目如下: Tic-tac-toe is played by two players A and B on a 3 x 3 grid. Here are the rules of Tic-Tac-To ...

  4. 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe

    题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...

  5. [CareerCup] 17.2 Tic Tac Toe 井字棋游戏

    17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...

  6. Epic - Tic Tac Toe

    N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If ...

  7. python 井字棋(Tic Tac Toe)

    说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...

  8. ACM-Team Tic Tac Toe

    我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...

  9. LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game

    地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...

  10. 【Python五篇慢慢弹】数据结构看python

    数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...

随机推荐

  1. JQuery制作网页——第五章 初识 jQuery

    1.jQuery简介: ● jQuery由美国人John Resig于2006年创建 ● jQuery是目前最流行的JavaScript程序库,它是对JavaScript对象和函数的封装 ● 它的设计 ...

  2. windows简易使用composer 安装国内镜像

    1.下载composer.phar文件 地址: https://getcomposer.org/download/  从下面选择一个 2.下载成功,新建项目(找到已有的项目文件夹)文件夹(D:\PHP ...

  3. 集合之Map

    Map:存放键值对,根据键对象找对应的值对象.键不能重复!Map键不能重复,有唯一性,一般通过键找对应的的值Map集合的特点: 1.具有映射关系 2.两列 3.一列要唯一 一列可以重复 键类似于 Se ...

  4. 利用谷歌翻译网站和Adobe Acrobat翻译英文文档,且鼠标放置后显示英文原文(无字数限制)(18/12/11更新)

    软件:Adobe Acrobat 网页:https://translate.google.cn/?tr=f&hl=zh-CN 方法:       第一步:用Adobe Acrobat 打开英文 ...

  5. 棋盘覆盖(我们学校自己的UOJ上的变形题)

    题目 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> # ...

  6. java入门---基本数据类型之内置数据类型

        变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间.内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据.     因此,通过定义不同类型的变 ...

  7. Sublime Text 3 新手上路:必要的安裝、設定與基本使用教學

    http://blog.miniasp.com/post/2014/01/07/Useful-tool-Sublime-Text-3-Quick-Start.aspx

  8. 北京Uber优步司机奖励政策(12月13日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. core 中ef 连接sql server数据库 在类库中 自动生成 model

    首先 介绍 Scaffold-DbContext "Server=.;database=sdd;User Id=sa;Password=123456;" Microsoft.Ent ...

  10. dvs-panotracking编译运行

    编译运行dvs-panotracking > 编译dvs-panotracking之前首先需要安装imageutilities . 源码下载 https://github.com/VLOGrou ...