8.6 Implement a jigsaw puzzle. Design the data structures and explain an algorithm to solve the puzzle. You can assume that you have a f itsWith method which, when passed two puzzle pieces, returns true if the two pieces belong together.

aaarticlea/jpeg;base64,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" alt="" width="176" height="132" />

这道题让我们设计一个拼图游戏,根据书上的解释,如上图所示是一种最基本的拼图游戏,每一片有四条边,总共有三种边,inner, outer, 和 flat的,角落的一片有两个flat的边,中间的片没有flat的边。那么我们需要一个边类Edge,还需要一个片类Piece,和一个拼图类Puzzle,在拼图类里用sort来初始化参数,再用solve来完成拼图。这里不得不吐槽一下,这道题在网上下载的代码里面都木有,而且书上的代码有很多小错误,改正后参见代码如下:

class Edge;

class Piece {
public:
vector<Edge*> _edges;
bool isCorner() {} // ...
}; enum Type { inner, outer, flat }; class Edge {
public:
Piece *_parent;
Type _type;
int _index;
Edge *_attachedTo;
bool fitsWith(Edge *edge) {} // ...
}; class Puzzle {
public:
vector<Piece*> _pieces;
vector<vector<Piece*> > _solution;
vector<Edge*> _inners, _outers, _flats;
vector<Piece*> _corners;
void sort() {
for (Piece *p : _pieces ) {
if (p->isCorner()) _corners.push_back(p);
for (Edge *e : p->_edges) {
if (e->_type == Type::inner) _inners.push_back(e);
if (e->_type == Type::outer) _outers.push_back(e);
}
}
}
void solve() {
Edge *currentEdge = getExposedEdge(_corners[]);
while (currentEdge != nullptr) {
vector<Edge*> opposites = currentEdge->_type == Type::inner ? _outers : _inners;
for (Edge *e : opposites) {
if (currentEdge->fitsWith(e)) {
attachEdges(currentEdge, e);
removeFromList(currentEdge);
removeFromList(e);
currentEdge = nextExposedEdge(e);
break;
}
}
}
}
void removeFromList(Edge *edge) {
if (edge->_type == Type::flat) return;
vector<Edge*> array = edge->_type == Type::inner ? _inners : _outers;
for (vector<Edge*>::iterator it = array.begin(); it != array.end(); ++it) {
if (*it == edge) {
array.erase(it);
break;
}
}
}
Edge* nextExposedEdge(Edge *edge) {
int next_idx = (edge->_index + ) % ; // Opposite edge
Edge *next_edge = edge->_parent->_edges[next_idx];
if (isExposed(next_edge)) {
return next_edge;
}
return getExposedEdge(edge->_parent);
}
void attachEdges(Edge *e1, Edge *e2) {
e1->_attachedTo = e2;
e2->_attachedTo = e1;
}
bool isExposed(Edge *edge) {
return edge->_type != Type::flat && edge->_attachedTo == nullptr;
}
Edge* getExposedEdge(Piece *p) {
for (Edge *e : p->_edges) {
if (isExposed(e)) return e;
}
return nullptr;
}
};

[CareerCup] 8.6 Jigsaw Puzzle 拼图游戏的更多相关文章

  1. 利用Vue.js实现拼图游戏

    之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...

  2. JavaScript拼图游戏

    今天是2016年最后一天上班了.最近几天都比较休闲,有时间空闲下来写写文档之类的. 2016过得真是快.感觉没做什么就过去了.想到之前想坚持每个月写一写博客都没坚持到.希望2017年可以吧. 无聊之余 ...

  3. JavaScript写一个拼图游戏

    拼图游戏的代码400行, 有点多了, 在线DEMO的地址是:打开: 因为使用canvas,所以某些浏览器是不支持的: you know: 为什么要用canvas(⊙o⊙)?  因为图片是一整张jpg或 ...

  4. 用Qt图形视图框架开发拼图游戏

    用Qt的图形视图框架(Graphics View Framework)做了一个拼图游戏DEMO,演示了: QGraphicsView.QGraphicsScene.QGraphicsItem的基本用法 ...

  5. Vue.js实现拼图游戏

    Vue.js实现拼图游戏 之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/ ...

  6. 程序设计 之 C#实现《拼图游戏》

    功能描述: 1.用户自定义上传图片 2.游戏难度选择:简单(3*3).一般(5*5).困难(9*9)三个级别 3.纪录完成步数 模块: 1.拼图类 2.配置类 3.游戏菜单窗口 4.游戏运行窗口 -- ...

  7. 程序设计 之 C#实现《拼图游戏》 (下) 原理篇

    前言:在 http://www.cnblogs.com/labixiaohei/p/6698887.html 程序设计 之 C#实现<拼图游戏>(上),上传了各模块代码,而在本文中将详细剖 ...

  8. 拼图游戏js

    实现算法: 1. JavaScript动态生成拼图:通过生成16个div,且除最后一个div不使用背景图片以外,其他div都设置拼图图片为背景.然后通过调整background-position来实现 ...

  9. 程序设计 之 C#实现《拼图游戏》 (上)代码篇

    原理详解请参考博客中 拼图游戏(下)原理篇 http://www.cnblogs.com/labixiaohei/p/6713761.html 功能描述: 1.用户自定义上传图片 2.游戏难度选择:简 ...

随机推荐

  1. 好RESTful API的设计原则

    说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间,如有人愿意转载请注明出处,谢谢^_^ P ...

  2. 传递给后台的Json数据解析

    后台代码如下: public void ProcessRequest(HttpContext context) { context.Response.ContentType = "appli ...

  3. 由IP和掩码计算广播地址

    public static IPAddress GetBroadcast(IPAddress ipAddress, IPAddress subnetMask) { var ip = ipAddress ...

  4. Eclipse++Xdebug开发php环境配置

    一.php环境配置: 本次使用了appserv 2.5.10集成安装包.具体版本如下,安装后php版本是5.2.6 vc6,apache版本2.2 安装完成后,php配置文件在c:\windows目录 ...

  5. oracle创建数据库和用户

    以前开发的时候用得比较多的是mysql和sql server,oracle用的比较少,用起来比较生疏,mysql和sql server用起来比较类似,就oracle的使用方式和他们不同,oracle在 ...

  6. C和CPP关于条件运算符的区别

    条件运算符形式: cond ? expr1 : expr2; 在C语言中执行过程是: 先对cond求值,值为真返回expr1的值,否则返回expr2的值.(右值) gcc测试结果: 在Cpp中如果两个 ...

  7. [转]ASP.NET 2.0中GridView无限层复杂表头的实现

    本文转自:http://blog.csdn.net/net_lover/article/details/1306211 实现方法就是给单元格填充我们想要的格式代码. C# <%@ Page La ...

  8. 快速熟悉Zbrush中的四种裁切笔刷

    ZBrush 4.0R4完善了裁切的功能.捷就可以把模型想要隐藏的地方用选择裁切的方法隐藏掉,其中ZBrush在®4.0R4软件中提供了4中裁切笔刷,分别为ClipCircle笔刷.ClipCircl ...

  9. UESTC 885 方老师买表 --状压DP

    将方格的摆放分成两种: 1.水平摆放:此时所占的两个格子都记为1. 2.竖直摆放:此时底下那个格子记为1,上面那个记为0. 这样的话,每行都会有一个状态表示. 定义:dp[i][s]表示考虑已经填到第 ...

  10. win10自动更新彻底关闭

    http://app.techweb.com.cn/wp/2016-10-24/2418646.shtml