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. 第一代到第四代多址技术:从FDMA、TDMA、CDMA到OFDMA

    做通信物理层有关的内容研究已经有很长一段时间了.一直没有怎么总结,今天借着秋招,来总结一波. 本文所讲的是多址技术,日常常见的有时分多址.频分多址.码分多址,对应TDMA.FDMA.CDMA. 那么什 ...

  2. 前端String转json

    1.data = eval("("+data+")");2.JSON.parse(data);

  3. Kafka 学习翻译 - 介绍

    Kafka是一个分布式的流式平台.可以从几个方面理解: 1. 三个重要的能力: 能够实现流式的发布和订阅数据,类似于消息队列或者企业级的消息分发系统. 能够在提供一定容错性和持久性能力的基础上存储数据 ...

  4. Python 爬虫 (五)

    # 头条街拍图片爬取 1 import re import requests from urllib import request import json import os i = 0 header ...

  5. Linux C语言编程基本原理与实践

    Linux C语言编程基本原理与实践(2018-06-16 19:12:15) Linux C语言编程基本原理与实践 高效的学习带着目的性: 是什么 -> 干什么 -> 怎么用 重识C语言 ...

  6. 使用ABAP CDS视图创建服务

    介绍本文介绍使用ABAP Core Data Services创建OData服务的最快方法. 给出了有关@ OData.publish注释利用率,对数据源CDS实体的引用和从DDIC结构导入的详细信息 ...

  7. CF 314 E. Sereja and Squares

    E. Sereja and Squares http://codeforces.com/contest/314/problem/E 题意: 给你一个擦去了部分左括号和全部右括号的括号序列,括号有25种 ...

  8. P1126 机器人搬重物

    P1126 机器人搬重物 题目描述 机器人移动学会(RMI)现在正尝试用机器人搬运物品.机器人的形状是一个直径1.6米的球.在试验阶段,机器人被用于在一个储藏室中搬运货物.储藏室是一个N*M的网格,有 ...

  9. angualarjs $location服务

    $location服务 angular使用内置的$location服务来监听.操作url,包括以下功能: - 获取.监听.改变地址栏的URL: - 与URL实现双向数据绑定(地址栏变动.前进后退或者点 ...

  10. FastJson - 从HttpEntity到Json

    在使用java + httpClient施行API自动化时,不可避免地遇到了如下问题: 1. 用Http Response数据做断言: 2. 用上一个请求的Response内容,作为下一个请求的参数: ...