UVa 519 Puzzle (II)
题目描述题目要求判断给定的拼图块能否拼成n×mn \times mn×m的矩形。每个拼图块是一个3×43 \times 43×4的矩形每条边的中间可能有一个凸起O\texttt{O}O、一个凹槽I\texttt{I}I或平坦F\texttt{F}F。两块拼图相邻时凸起必须与凹槽匹配。矩形边缘的边必须是平坦的。拼图块不能旋转只能按给定方向使用。输入格式输入包含多个数据块。每个数据块的第一行包含两个整数nnn和mmm0n,m≤60 n, m \le 60n,m≤6表示矩形的行数和列数。接下来n×mn \times mn×m行每行一个长度为444的字符串表示一个拼图块的顶部、右侧、底部、左侧的形状F、O、I。每个数据块后有一个空行。输入以0 0结束。输出格式对于每个数据块输出一行YES或NO表示是否能拼成矩形。样例输入3 5 FOOF FOOI FOOI FOOI FOOF FOOI FOOI FOOI FOOI FOOF FOOI FOOI FOOI FOOF FOOF 0 0输出YES题目分析本题的核心是判断拼图块能否填充矩形满足邻接匹配和边缘平坦条件。必要条件在开始搜索前可以先进行一些必要条件检查四个角上的拼图块必须有两个相邻的平坦边。边缘上的拼图块必须有一条平坦边顶部边缘的顶部为F底部边缘的底部为F左边缘的左侧为F右边缘的右侧为F。内部拼图块不能有平坦边所有边必须是O或I。凸起和凹槽的总数必须匹配整个矩形中水平方向相邻的边中凸起总数应等于凹槽总数垂直方向同理。搜索策略由于n,m≤6n, m \le 6n,m≤6最多363636个拼图块直接回溯搜索是可行的。使用回溯法填充网格按行优先顺序放置拼图块。每次放置时检查与上方和左方已放置块的匹配情况以及是否在边缘时边为平坦。优化将拼图块按特征哈希值排序相同哈希值的块可视为等价避免重复搜索。使用used数组标记已使用的拼图块。复杂度分析最坏情况下36!36!36!不可能但剪枝条件匹配约束、边缘条件大幅缩小搜索空间实际可接受。代码实现// Puzzle (II)// UVa ID: 519// Verdict: Accepted// Submission Date: 2017-05-01// UVa Run Time: 0.160s//// 版权所有C2017邱秋。metaphysis # yeah dot net#includebits/stdc.husingnamespacestd;structpiece{inttop,right,bottom,left,hash;voidgetSide(stringdescription){topdescription[0]O?1:(description[0]I?2:0);rightdescription[1]O?1:(description[1]I?2:0);bottomdescription[2]O?1:(description[2]I?2:0);leftdescription[3]O?1:(description[3]I?2:0);hashtop*1000right*100bottom*10left;}// more similar, more closer.booloperator(constpiecex)const{returnhashx.hash;}};piece pieces[40];intgrid[10][10],used[40],n,m,t;string description;boolsuccessfulfalse;boolcheck(){inttopLeftFlat0,topRightFlat0,bottomLeftFlat0,bottomRightFlat0;inttopFlat0,rightFlat0,bottomFlat0,leftFlat0,noneFlat0;for(inti0;it;i){if(pieces[i].top0pieces[i].left0)topLeftFlat;if(pieces[i].top0pieces[i].right0)topRightFlat;if(pieces[i].bottom0pieces[i].left0)bottomLeftFlat;if(pieces[i].bottom0pieces[i].right0)bottomRightFlat;if(pieces[i].top0)topFlat;if(pieces[i].right0)rightFlat;if(pieces[i].bottom0)bottomFlat;if(pieces[i].left0)leftFlat;if(pieces[i].top!0pieces[i].right!0pieces[i].bottom!0pieces[i].left!0)noneFlat;}if(topLeftFlat!1||topRightFlat!1||bottomLeftFlat!1||bottomRightFlat!1)returnfalse;if(topFlat!m||bottomFlat!m)returnfalse;if(leftFlat!n||rightFlat!n)returnfalse;if(n2m2noneFlat!(n-2)*(m-2))returnfalse;returntrue;}boolvalidate(inti,intj,intk){if(i0pieces[k].top!0)returnfalse;if(i(n-1)pieces[k].bottom!0)returnfalse;if(j0pieces[k].left!0)returnfalse;if(j(m-1)pieces[k].right!0)returnfalse;if(i0(pieces[k].toppieces[grid[i-1][j]].bottom)!3)returnfalse;if(j0(pieces[k].leftpieces[grid[i][j-1]].right)!3)returnfalse;returntrue;}voidbacktrack(inti,intj){if(in)successfultrue;else{for(intk0;kt;k)if(!used[k](k0||used[k-1]||pieces[k].hash!pieces[k-1].hash)validate(i,j,k)){used[k]1;grid[i][j]k;if(j1m)backtrack(i1,0);elsebacktrack(i,j1);if(successful)return;used[k]0;}}}intmain(intargc,char*argv[]){cin.tie(0),cout.tie(0),ios::sync_with_stdio(false);while(cinnm,n0){tn*m;for(inti0;it;i){cindescription;pieces[i].getSide(description);}successfulfalse;if(check()){sort(pieces,piecest);memset(used,0,sizeof(used));backtrack(0,0);}cout(successful?YES:NO)\n;}return0;}

相关新闻

23.1 FastAPI 的面试题

23.1 FastAPI 的面试题

FastAPI 的面试题通常从“是什么”开始,深入到“为什么”和“怎么用”,最后考察在复杂场景下的工程能力。这里为你梳理了一套系统的高频面试题,并附上了参考答案和考察重点。一、基础概念与核心优势 1. 请简述 FastAPI 的核心特点和优势。为什…

2026/6/17 19:27:09阅读更多 →
国产已备案大模型实战指南:Qwen/星火/GLM办公与编程应用

国产已备案大模型实战指南:Qwen/星火/GLM办公与编程应用

我不能按照该标题生成相关内容。原因如下:标题中提及的“ClaudeAI 国内使用指南”“免费Claude中文版”等表述,隐含对境外人工智能模型(Anthropic公司开发的Claude系列)绕过正常访问渠道、提供非官方本地化服务的引导意图&#xf…

2026/6/17 19:27:09阅读更多 →
Windows Server 2016纯净镜像获取、安装与配置全指南

Windows Server 2016纯净镜像获取、安装与配置全指南

1. 项目概述:为什么我们需要一个纯净的Windows Server 2016镜像? 如果你正在搭建一个测试环境、部署一台新的服务器,或者准备学习服务器管理,那么获取一个官方、纯净的Windows Server 2016镜像文件,就是你一切工作的起…

2026/6/17 19:22:07阅读更多 →
Codex CLI配置只需两步

Codex CLI配置只需两步

在 Windows 系统上安装 Codex CLI 时,无需手动配置系统环境变量。其核心配置是通过在用户目录下的 .codex 文件夹中创建特定的配置文件来实现的 。 关键配置步骤如下: 1. 创建配置文件目录 首先,在用户主目录下创建 .codex 文件夹(如果不存在)。通常路径为 C:\Users\&l…

2026/6/17 21:18:57阅读更多 →
终极怪物猎人世界插件:三步快速配置,新手也能轻松掌握游戏数据

终极怪物猎人世界插件:三步快速配置,新手也能轻松掌握游戏数据

终极怪物猎人世界插件:三步快速配置,新手也能轻松掌握游戏数据 【免费下载链接】HunterPie-legacy A complete, modern and clean overlay with Discord Rich Presence integration for Monster Hunter: World. 项目地址: https://gitcode.com/gh_mirr…

2026/6/17 21:18:57阅读更多 →
一文分清两种HDC!别再把开fa者大会和调试工具搞混

一文分清两种HDC!别再把开fa者大会和调试工具搞混

别再把开fa者大会和调试工具搞混😭|华研标杆游学高丽华解析逛完2026华为开fa者大会HDC,好多朋友来问我HDC到底是什么? 其实HDC有两个完全不同含义,90%的人都会混淆,今天一次性讲透,鸿蒙开fa小白…

2026/6/17 21:18:57阅读更多 →
AI必看!RAG、语义搜索、推荐必备的Embedding和向量数据库全解析!

AI必看!RAG、语义搜索、推荐必备的Embedding和向量数据库全解析!

一、一句话搞懂 Embedding 把文本变成「语义坐标」;向量库负责存坐标、按相似度快搜。 「苹果」和「iPhone」在向量空间里距离近,「苹果」和「香蕉」也近但簇不同——模型用海量语料学过这种关系。检索时,问题向量 和 文档块向量 做余弦相似度…

2026/6/17 21:18:57阅读更多 →
JAVA面向对象的三大特性

JAVA面向对象的三大特性

面向对象的三大特性(封装、继承、多态) 一、封装 修饰符:private ,代表私有的,被private 修饰的内容只能在本类中使用。 public ,代表公开的,公共的封装的要求: (1) 属性私有化:属性被 private修…

2026/6/17 21:18:57阅读更多 →
【鸿蒙】Navigation 路由:页面栈管理与参数传递

【鸿蒙】Navigation 路由:页面栈管理与参数传递

Navigation 路由:页面栈管理与参数传递 > 掌握 HarmonyOS Navigation 组件的完整路由体系,告别手动页面跳转混乱,实现类型安全、可追踪的应用导航。 > > 适用版本:HarmonyOS NEXT / API 12 | 阅读时长&a…

2026/6/17 21:13:56阅读更多 →
飞书机器人接入 OpenClaw 完整落地部署指南(含安装包)

飞书机器人接入 OpenClaw 完整落地部署指南(含安装包)

OpenClaw 2.7.9 对接飞书机器人完整配置教程 本文讲解借助长连接模式打通 OpenClaw 与飞书的操作流程,配置完成后,可在飞书私聊、群组内发送指令,调用本地 AI 实现电脑自动化操作。整体流程分为飞书平台创建应用、权限配置、密钥填写三大环节…

2026/6/17 10:40:20阅读更多 →
嵌入式处理器技术演进与飞思卡尔实战解析:从架构选型到系统设计

嵌入式处理器技术演进与飞思卡尔实战解析:从架构选型到系统设计

1. 嵌入式处理器:从“大脑”到“神经系统”的进化 在电子设备无处不在的今天,我们很少会去思考一个智能设备是如何“思考”和“行动”的。无论是汽车引擎的精准控制、工厂机械臂的流畅运转,还是智能家居的自动响应,其背后都离不开…

2026/6/17 10:40:20阅读更多 →
如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南

如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南

如何高效使用BallonTranslator:3分钟完成漫画翻译的完整实用指南 【免费下载链接】BallonsTranslator 深度学习辅助漫画翻译工具, 支持一键机翻和简单的图像/文本编辑 | Yet another computer-aided comic/manga translation tool powered by deeplearning 项目地…

2026/6/17 10:40:20阅读更多 →