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. TeamViewer13个人版使用中提示为商用版导致无法使用

    前言:由于使用teamviewer个人免费版较频繁,被软件识别到不能再继续免费使用,无奈没有多余的资金进行购买正版软件, 通过鼓捣得到如下继续免费使用方案,整理下来以备不时之需,也可以被有同此困惑的朋 ...

  2. 继续深入更新shell脚本容易出错的地方

    一.在shell中用到如果需要输入某些值,需要用到read -p命令 这是我写的猜数字游戏,一开始在输出的时候,屏幕上总会打印输出  "INT" 经过反复的练习才发现 双引号后面应 ...

  3. JSP工作流程

    情况1:第一次请求一个页面 情况2:该页虽然是再次请求,但已经过修改 情况3:该页面是再次请求且未被修改

  4. mysql索引建立原则

    看了网上一些网上关于创建索引的原则,在这里做一下总结: 1.尽量创建在使用频率较高的字段上,比如主键,外键,where总用到的字段,join是相关联的字段 2.如果表过大,一定要创建索引. 3.索引应 ...

  5. 面试乐融集团Python开发工程师有感

    这是笔者第一次面试,,乐融集团位于朝阳区朝阳公园的乐融大厦.是下午两点的笔面试,笔者是一点半到的,然后在里面等了会,开始笔试 笔试题并不是太难,就是考的比较宽,因为笔者是校招,所以笔试题出来了数据结构 ...

  6. pip快速git项目安装

    pip install git+https://github.com/xx/xx.git

  7. u-boot.2012.10makefile分析,良心博友汇总

    声明:以下内容大部分来自网站博客文章,仅作学习之用1.uboot系列之-----顶层Makefile分析(一)1.u-boot.bin生成过程分析 2.make/makefile中的加号+,减号-和a ...

  8. 最新Altium_Designer_Beta_18.7.is AD18安装教程及破解说明

    下解Altium_Designer带破解的压缩包. 下载链接:https://pan.baidu.com/s/1TlPHtSthJKxLcXWcCR-q-g 密码:bt0g 解压缩Altium_Des ...

  9. 关于C链表的实现

    学习了数据结构后,自己学习写了一个链表的程序.初步功能是实现了.但是不知道会不会有一些隐含的问题.所以希望大佬指导指导 /******************/ /*一个小的链表程序*/ /***** ...

  10. STM32 时钟配置的坑

    今天在调试公司的一款产品的时候发现8M的晶振用完了,于是找了一个16M的替代 坑爹的就在这里,明明已经把时钟按照时钟树配置好了,但是串口等外设一直无法正常工作 折腾了一下午,终于发现这位老兄的文章ht ...