存储连连看地图可以用数组存储,也可以用把地图当做图来处理,用邻接矩阵来存储。

下面展示这两种方法的区别:

初始化图中边的算法思想:

其中有使用typedef语句定义数组类型https://www.cnblogs.com/Jason-Damon/archive/2011/10/23/2222119.html

初始化边的算法:

其中global.h中的成员有:

typedef struct tagVertex {
int row;//行
int col;//列
int info;//图片标号
}Vertex;
typedef struct tagFlag {
bool bTime;//是否有及时进度条
bool bProp;//是否有道具按钮
bool bScore;//积分显示
CString szTitle;//对话框标题啦文字
}FLAG;
typedef struct tagScore {
int nMode;//游戏模式,1休闲模式,2关卡模式
int nGrade;//积分
int nLevel;//积分等级
CString strName;//玩家姓名

}SCORE, RankArrry;

重排算法:

判断能否联通的算法:

1.穷举法数组:

bool CGameLogic::IsLink(int anMap[][4],Vertex v1,Vertex v2)
{
m_nVexNum = 0;
PushVertex(v1);
// TODO: 在此处添加实现代码.
if (anMap[v1.row][v1.col] ==
anMap[v2.row][v2.col]) {
if (v2.row== v1.row) {//在一条直线上,行号相同
if (LinkInRow(anMap, v1, v2)) {
PushVertex(v2);
return true;
}
}
if (v2.col==v1.col) {//在一条直线上,列号相同
if (LinkInCol(anMap, v1, v2)) {
PushVertex(v2);
return true;
}
}
if (OneCornerLink(anMap, v1, v2)) {//两条线连接
PushVertex(v2);
return true;
}
if (ThreeLink(anMap, v1, v2)) {//三条直线连接即找四周联通的点能否两条线连接到终点。
PushVertex(v2);
return true;
}
}
PopVertex();
return false;
}

2.图结构:

bool CGameLogic::IsLink(CGraph &g,Vertex v1,Vertex v2)
{
m_LogicVexNum = 0;
m_nCorner = 0;
for (int i = 0; i < MAX_VERTEX_NUM;i++) {
m_anPath[i] = -1;
}
PushVertex(v1.row * MAX_COL + v1.col);
if (SerchPath(g,v1.row * MAX_COL + v1.col, v2.row * MAX_COL + v2.col))
return true;
return false;

}

bool CGameLogic::SearchValidPath(CGraph & g)
{
int nVexnum = g.GetVexnum();
int m_first;
Vertex v1, v2;
for (int i = 0; i < nVexnum; i++) {
if ((m_first=g.GetVertex(i))!=BLANK) {//查找下一个
for (int j = i+1; j < nVexnum;j++) {
if (g.GetVertex(j) == m_first) {
v1.row = i / MAX_COL;
v1.col = i % MAX_COL;
v2.row = j / MAX_COL;
v2.col = j % MAX_COL;
if (IsLink(g,v1,v2)) {
return true;
}
}
}
}
}
return false;

}

消去图片后,更新图的结构算法思想:

7.连连看的数据结构与算法(数组存储和图的邻接矩阵存储)。相关推荐

  1. 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)

    邻接表存储的图 - DFS /* 邻接表存储的图 - DFS */void Visit( Vertex V ) {printf("正在访问顶点%d\n", V); }/* Visi ...

  2. JavaScript数据结构与算法——数组详解(下)

    1.二维与多维数组 JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组. 1.1 创建二维数组 二维数组类似一种由行和列构成的数组表格,在JavaScript ...

  3. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  4. 数据结构与算法(7-1)图的存储(邻接矩阵、邻接表)

    目录 一.图的邻接矩阵 存储结构 总代码 二.网图的邻接矩阵 存储结构 总代码 三.图的邻接表 存储结构 1.顶点列表结构体 2.邻接顶点结构体 总代码 四.网图的邻接表 存储结构 1.顶点列表结构体 ...

  5. 数据结构与算法(C++)– 图(Graph)

    数据结构与算法(C++)– 图(Graph) 1.图的基础概念 定义:一个图G=(V, E)由顶点(vertex)的集V和边(edge)的集E组成. 边(edge):一对点即为一条边(v, w),其中 ...

  6. 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法:三十张图弄懂「图的两种遍历方式」...

    原创: 进击的HelloWorld1 引言遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次. 在二叉树基础中,介绍了对于树的遍历.树的遍历是指从根节点 ...

  7. c++层次遍历_数据结构与算法,弄懂图的两种遍历方式

    1 引言   遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次.  在二叉树基础中,介绍了对于树的遍历.树的遍历是指从根节点出发,按照一定的访问规则, ...

  8. 深度优先遍历访问的边集合_数据结构与算法: 三十张图弄懂「图的两种遍历方式」...

    1 引言 遍历是指从某个节点出发,按照一定的的搜索路线,依次访问对数据结构中的全部节点,且每个节点仅访问一次. 在二叉树基础中,介绍了对于树的遍历.树的遍历是指从根节点出发,按照一定的访问规则,依次访 ...

  9. 图的邻接矩阵存储及遍历操作

    第1关:图的邻接矩阵存储及求邻接点操作 任务描述 本关任务:要求从文件输入顶点和边数据,包括顶点信息.边.权值等,编写程序实现以下功能. 1)构造无向网G的邻接矩阵和顶点集,即图的存储结构为邻接矩阵. ...

最新文章

  1. 找工作面试经历——校招、秋招、图像算法、求职面试之路
  2. 华为手环怎么没有上鸿蒙,不再是大号手环!华为鸿蒙手表来了:要和苹果抢生态?...
  3. java list 比较_Java中List的五种去重方法及效率对比,你都用对了吗?
  4. PHP7中php.ini、php-fpm和www.conf的配置
  5. C++面试常见问题整理汇总(面试者必看哦!)
  6. 吴恩达作业7:梯度下降优化算法
  7. 没有桌面体验功能就不能进行图片打印
  8. Vmware虚拟机修改静态IP无法ping外网,以及eth0不见问题解决
  9. spring与web关系
  10. pandas将df赋值到另一个df_pandas基础
  11. ps中怎么调整字体间距
  12. c++逆天改命进阶--map_set
  13. aspen压缩因子_ASPEN PLUS的物性数据库及其应用.pdf
  14. RTP/RTCP工程实践与问题解决方案(合集)
  15. [IT与培训]IT培训与企业建设的思路
  16. Port Triggering
  17. 哀悼日, 网页变灰的实现
  18. 抽象类和接口都不能被实例化
  19. 轻巧的批量图片压缩工具imgfast
  20. 买卖时机APP 开启股票交易大数据时代!

热门文章

  1. Java基础之流程控制语句
  2. 二叉树的三种遍历方式
  3. 微信小程序播放详情页,附带:点赞.双击点赞.单击控制视频播放.上下滑动切换视频等功能
  4. USB驱动程序之一(USB介绍、USB数据传输、USB设备枚举)
  5. Linux仿QQ实验报告,Linux QQ测试报告
  6. 用STC一箭双雕之USB转双串口仿真STC8系列MCU
  7. php解析和风天气api,API爬取天气预报数据
  8. 【总结】vue相关集合
  9. 如何插入html邮件,如何在电子邮件正文中插入HTML
  10. 国产5v升压充电8.4v芯片