蓝桥杯17届第四题——方块分割(思维,dfs)

方块分割

6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状完全相同。
如图:p1.png, p2.png, p3.png 就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不同的分割方法。
注意:旋转对称的属于同一种分割法。
请提交该整数,不要填写任何多余的内容或说明文字。
p1
p2
p3


一开始觉得用dfs从(0,0)坐标开始分割出不同的方格图形,但是这种方格图形“不能回头”,所以会漏掉很多情况。

突破口:方块分割后的图形沿着格以(3,3)中心对称。

我们只要通过坐标的方式,用dfs“绘画出可能的切割线”出一半与边界连通的图形,即可得到一个分割方案。
ps:描绘方向为上、下、左、右,最终ans应当除以四。

/*
因为分割后的图形完全相同,所以方格以(3,3)中心对称
用dfs“绘画出可能的切割线”出一半与边界连通的图形,即可得到一个分割方案。 
*/
#include<bits/stdc++.h>
using namespace std;
int ans=0;
int X[4]={
   0, 0, -1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你的问。不过在开始之前,我想提醒你一点:我是一个人工智能程序,虽然我能够回答你的问,但我没有自己的思想和判断力,我的回答仅仅是基于预先编写好的算法和数据模型,所以我的回答可能存在局限性和偏差,仅供参考。 那么,回到你的问。你问的是如何实现PHP扑克牌比大小,这是一个比较经典的问,需要用到一些基本的编程知识和算法。 首先,我们需要了解扑克牌的规则。扑克牌一共有52张,分为四种花色(红桃、方块、梅花、黑桃),每种花色有13张牌(A、2、3、4、5、6、7、8、9、10、J、Q、K)。比大小的时候,先比较牌型(顺子、同花、葫芦等),如果牌型相同,则按照牌面大小比较,A最大,2最小,依次递增。 接着,我们可以考虑如何用PHP来实现扑克牌的比较。这里我们可以采用面向对象的方式,将扑克牌抽象成一个类,其中包含牌面、花色、牌型等属性和方法。比较时,可以定义一个比较函数,将两张牌进行比较,返回较大的那张牌。具体实现可以参考如下代码: ```php class Poker { private $face; private $suit; public function __construct($face, $suit) { $this->face = $face; $this->suit = $suit; } public function compare($other) { if ($this->face > $other->face) { return $this; } else if ($this->face < $other->face) { return $other; } else { // 如果牌面相同,则比较花色 if ($this->suit > $other->suit) { return $this; } else { return $other; } } } } ``` 这里我们定义了一个Poker类,包含了牌面和花色两个属性,以及一个比较函数compare。比较函数首先比较牌面大小,如果牌面相同则比较花色大小。在比较花色时,我们可以将花色定义为一个整数,红桃为1,方块为2,梅花为3,黑桃为4,这样可以方便地比较大小。 在实际使用中,我们可以生成一副扑克牌,然后进行洗牌和发牌,最后比较两张牌的大小。具体实现可以参考如下代码: ```php // 生成一副扑克牌 $poker = array(); for ($i = 1; $i <= 13; $i++) { $poker[] = new Poker($i, 1); // 红桃 $poker[] = new Poker($i, 2); // 方块 $poker[] = new Poker($i, 3); // 梅花 $poker[] = new Poker($i, 4); // 黑桃 } // 洗牌 shuffle($poker); // 发牌 $hand1 = array(); $hand2 = array(); for ($i = 0; $i < 5; $i++) { $hand1[] = array_shift($poker); $hand2[] = array_shift($poker); } // 比较牌面大小 $max1 = $hand1[0]; $max2 = $hand2[0]; foreach ($hand1 as $card) { $max1 = $max1->compare($card); } foreach ($hand2 as $card) { $max2 = $max2->compare($card); } // 输出结果 if ($max1->compare($max2) === $max1) { echo "Hand 1 wins\n"; } else { echo "Hand 2 wins\n"; } ``` 这里我们生成了一副扑克牌,然后进行洗牌,接着分别发给两个玩家5张牌。最后,我们比较两张牌的大小,输出比较结果。这里我们假设了只有两个玩家,实际上可以根据需要进行扩展。 希望这个简单的示例能够帮助你理解如何用PHP实现扑克牌比大小。如果你还有其他问,可以继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值