[Elite 2008 Dec USACO]Jigsaw Puzzles
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define Up num[0]
#define Right num[1]
#define Down num[2]
#define Left num[3] char ca,cb,cc,cd;
int r,c,rc;
bool v[]; class Jigsaw
{
public:
int serialNumber;
char num[];
public:
void readIn()
{
scanf("%d%*c%c%*c%c%*c%c%*c%c%*c",&serialNumber,num,num+,num+,num+);
}
void printOut()
{
printf("%d %c %c %c %c\n",serialNumber,num[],num[],num[],num[]);
}
int checkCorner()
{
int i;
for (i=; i<; i++)
{
if (num[i] == '' && num[(i+)%] == '')
return i;
}
return -;
}
int checkSuit2c()
{
int i;
for (i=; i<; i++)
{
if (num[i] == ca && num[(i+)%] == cb)
return i;
}
return -;
}
int checkSuit3c()
{
int i;
for (i=; i<; i++)
{
if (num[i] == ca && num[(i+)%] == cb && num[(i+)%] == cc)
return i;
}
return -;
}
int checkSuit4c()
{
int i;
for (i=; i<; i++)
{
if (num[i] == ca && num[(i+)%] == cb && num[(i+)%] == cc)
return i;
}
return -;
}
};
Jigsaw js[];
Jigsaw tb[][];
bool check_and_rotate(int x,int y,int d)
{
int t;
if (x == && y == )
{
t=js[d].checkCorner();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
if (x == )
cb='';
else
cb=tb[x-][y].Down;
if (y == )
ca='';
else
ca=tb[x][y-].Right;
if (y == c-)
{
cc='';
t=js[d].checkSuit3c();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
else if (x == r-)
{
cc='';
t=js[d].checkSuit4c();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
else
{
t=js[d].checkSuit2c();
if (t == -)
return false;
tb[x][y].serialNumber=js[d].serialNumber;
tb[x][y].Left=js[d].num[t];
tb[x][y].Up=js[d].num[(t+)%];
tb[x][y].Right=js[d].num[(t+)%];
tb[x][y].Down=js[d].num[(t+)%];
return true;
}
return false;
}
bool DFS(int x,int y)
{
int i,j;
if (y == c)
{
x++;
y=;
if (x == r)
{
for (i=; i<r; i++)
{
for (j=; j<c; j++)
{
tb[i][j].printOut();
}
}
return true;
}
return DFS(x,y);
}
for (i=; i<rc; i++)
{
if (v[i] == true)
continue;
if (check_and_rotate(x,y,i) == true)
{
v[i]=true;
if (DFS(x,y+) == true)
return true;
v[i]=false;
}
}
return false;
}
int main()
{
int i,j;
scanf("%d%d",&r,&c);
rc=r*c;
for (i=; i<rc; i++)
{
js[i].readIn();
v[i]=false;
}
DFS(,);
return ;
}
USACO Elite 2008 December Competition Silver
题意:给你一些正方形的拼图碎块,每个碎块有四个边,每边都有一个记号,分别是小写字母a-z。其中没有标记的边,也就是边界的边用'0'标记。题目给定一个矩阵,把这些碎块放进去,要求每个边相接的记号必须一样,边界上的边必须是'0'。
解法:DFS。这个操作起来还是挺麻烦的,做处理的时候要小心一些。
[Elite 2008 Dec USACO]Jigsaw Puzzles的更多相关文章
- [usaco] 2008 Dec  Largetst Fence 最大的围栏 2 || dp
		
原网站大概已经上不了了-- 题目大意: 求出平面上n个点组成的一个包含顶点数最多的凸多边形.n<=250. 考虑我们每次枚举凸包的左下角为谁(参考Graham求凸包时的左下角),然后像Graha ...
 - BZOJ 1606 USACO 2008 Dec. 购买干草
		
[题意概述] 有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品 [题解] 显然是个无限背包嘛.. 直接做背包DP就好 注意无限背包的写法和01背包的区别 #include< ...
 - 【洛谷P2927 [USACO08DEC]拼图游戏Jigsaw Puzzles】深搜
		
其实,随便搜了一搜就可以AC了!!! - - 亏我纠结了这么久= = #include<cstdio> #include<cstdlib> #include<cstrin ...
 - bzoj AC倒序
		
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
 - Self-Supervised Representation Learning
		
Self-Supervised Representation Learning 2019-11-11 21:12:14 This blog is copied from: https://lilia ...
 - LOJ10199轻拍牛头
		
题目描述 原题来自:USACO 2008 Dec. Silver 今天是 Bessie 的生日,并且现在是聚会的游戏时间.Bessie 让编号为 1~N 的 N 头奶牛围成一个圈坐(所以除了最后一头牛 ...
 - tcmalloc资料
		
1. 确定dylib在max os是可以成功的. http://lists.apple.com/archives/perfoptimization-dev/2008/Dec/msg00002.html ...
 - ICCV 2017论文分析(文本分析)标题词频分析 这算不算大数据 第一步:数据清洗(删除作者和无用的页码)
		
IEEE International Conference on Computer Vision, ICCV 2017, Venice, Italy, October 22-29, 2017. IEE ...
 - 2016CVPR论文集
		
http://www.cv-foundation.org/openaccess/CVPR2016.py ORAL SESSION Image Captioning and Question Answe ...
 
随机推荐
- jQuery----淘宝商品展示(类似与tab切换)
			
实现效果如图: 功能需求: ①鼠标进入商品名称,商品名称变色,同时对应的物品展示图片显示对应的物品,鼠标移出时候,商品名称恢复原来的颜色 实现分析: 1.HTML+CS ...
 - Mac开发中遇到的一些小问题解析
			
通过mac开发的过程中,有一些小问题出现,列如下,后续会持续增加: 1. 命令行清空废纸篓(jar包太多,倾倒废纸篓太慢) sudo rm -rfv ~/.Trash /Volumes/*/.Tras ...
 - HTML5基础知识总结(一)
			
新增的标签和属性 1.结构标签 article section aside nav header footer hgroup figure address 2.媒体标签 video audio emb ...
 - PHPCMS v9 手机端栏目绑定模板
			
phpcms的手机端,模块是有了,但是有些地方用的还不是很舒服,其中移动端栏目无法绑定模板就不是很方便.如图,所有的栏目绑定的模板是固定的. 这次咱们就来处理下,移动端如何设置相应的模板.这里说是设置 ...
 - 一维码EAN 13简介及其解码实现(zxing-cpp)
			
一维码EAN 13:属于国际标准条码, 由13个数字组成,为EAN的标准编码型式(EAN标准码). 依结构的不同,EAN条码可区分为: 1. EAN 13码: 由13个数字组成,为EAN的标准编码型 ...
 - Object C学习笔记9-字符串NSMutableString
			
NSMutableString类继承自NSString,所以在NSString中的方法在NSMutableString都可以使用. NSMutableString和NSString的区别在于NSMut ...
 - iTerm的安装以及配置Oh My Zsh
			
iTerm说简单点就是Windows的命令提示符,可能说这个大家感觉没用过,其实也就是人们经常使用CMD,相当于苹果的终端,但是比自带的终端强大多了. 本文就是简单的说一下安装和简单的配置过程. 首先 ...
 - 【10.13】Bug Bounty Write-up 总结
			
今天惯例邮箱收到了Twitter的邮件提醒有新的post,这种邮件每天都能收到几封,正好看到一个Bug Bounty的write up,比较感兴趣,看起来也在我的理解范围之内,这里对这篇write u ...
 - java学习(四)修饰符、运算符、循环结构、分支结构
			
修饰符 一般是放在定义类,方法,变量的最前端 访问控制修饰符 修饰符 当前类 同一包内 子孙类 其他包 public Y Y Y Y protected Y Y Y N default Y Y N N ...
 - 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock
			
使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...