`
javasee
  • 浏览: 973330 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

一步一步写算法(之图的保存)

 
阅读更多

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】


前面的几篇博客,我们对图进行基本定义,同时介绍了图的创建、图的添加和删除等。今天,我们聊一聊图是怎么在存储在外设中的。这些外接设备可以是各种类型的,比如说,可以是硬盘、sd卡、网络硬盘等等。本质上说,我们今天讨论的主题就是怎么把图的数据永久地保留在本地。并且,如果需要加载这些数据,也可以快速恢复图原来的面貌。对图数据结构已经记得不太清楚的朋友可以复习一下面的代码,回想一下我们之前的定义方法。

数据结构中有好多的指针。那么在外存中应该怎么保存呢?因为对于外存来说,指针是没有什么意义的。大家稍微思考其实就明白了。其实我们可以把这些指针全部看成是偏移值。GRAPH是有许多的点构成的,点的结构中有很多的边连接,那么我们就可以按照下面的顺序保存数据。

那么偏移值怎么安排呢?

a)GRAPH结构

head为第一个vectex的偏移地址。


b)VECTEX结构

neighbour记录了第一条边的偏移位置,next记录了下一个节点的偏移值。


c)LINE结构

next为下一条边的偏移值。


但是,如果我们做一些优化的话,那么保存的数据还要少一些。比如说,第一个vectex的节点就在GRAPH的后面,那么head实际上不需要保存;同时在vectex结构中,因为我们需要知道LINE的偏移值,所以neighbour的偏移是需要知道的,但是next就不再需要了,因为vectex数据本身就是并列在一起的;最后同样因为我们需要把所有属于同一个vectex的边放在一起,那么LINE结构中的next数据其实也可以省略了。所以修改后保存的数据结构大体应该是这样的:


有了上面的数据结构,那么从外层加载数据就是一个逆向操作而已,不再复杂了。


分享到:
评论

相关推荐

    一步一步写算法

    本篇文章主要介绍了算法的基本概念以及在编程中的具体应用,以一步一步学习写算法的思路,从基础的循环和递归,到复杂的数据结构处理。 1. 循环和递归是编程中常用的基本控制结构,用于处理重复的操作。循环利用...

    [纯C语言 + Win32 API]一步一步写个围棋程序之二十一:保存图形棋谱

    当玩家想要保存棋谱时,我们遍历这个数据结构,用GDI重新绘制棋盘上每一步的棋子,然后将整个棋盘状态保存为图像。 在实际操作中,我们还需要处理一些细节问题,比如棋盘的坐标系统、棋子颜色的表示、以及非法移动...

    夜深人静写算法(四)算法设计与分析第四次作业

    夜深人静写算法(四)算法设计与分析第四次作业涉及了多个重要主题,包括贪心算法、动态规划、图算法等。在贪心算法方面,我们学习了如何通过每一步的最优选择来得到整体的最优解,例如霍夫曼编码、最小生成树等问题...

    [纯C语言 + Win32 API]一步一步写个围棋程序之十二:增加围棋规则

    可能还需要保存和加载游戏进度的功能。 9. **悔棋与提子**:实现悔棋功能,撤销最近的一次落子。同时,当某个棋子被完全包围时,需要将其从棋盘上移除。 10. **界面设计**:创建一个用户友好的界面,包括标题、...

    算法设计之贪心算法ppt

    贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。它的基本思想是:每次选择局部最优解,期望这些局部最优解组合成全局最优解。贪心算法并不...

    Dijskra算法 floyd算法

    在每一步中,它会选择当前未访问节点中距离起点最短的一个,并更新与之相邻节点的距离。Dijkstra算法使用了优先队列(如堆)来保证每次选择最近的节点,确保找到的路径是最短的。在"ShortPath.cpp"文件中,可能包含...

    NOIP贪心算法算法

    在NOIP(全国青少年信息学奥林匹克竞赛)中,贪心算法是参赛者必须掌握的重要算法之一,因为它可以帮助解决许多实际编程挑战。OIER(信息学竞赛参与者)在准备比赛时,理解和运用贪心算法至关重要。 贪心算法的基本...

    VC 九宫图算法(递归算法).rar

    九宫图,又称幻方,是一种将数字填入3x3的方格中,使得每行、每列以及两条对角线上的数字之和都相等的数学游戏。 九宫图的生成可以通过递归方法实现,因为其本质上是一个深度优先搜索的问题。下面我们将详细介绍这...

    [纯C语言 + Win32 API]一步一步写个围棋程序之六:工具栏之二

    - 提示功能可能需要实现一个简单的AI算法,以提供合理的下一步建议。 在“之六”这一部分,我们可能还会涉及如何处理用户输入,以及如何与其他部分的代码(如棋盘逻辑、图形渲染等)集成。 总结来说,创建一个围棋...

    3个程序,自己写的分治法,动态规划法,贪心算法

    这些算法不仅在理论研究中占有重要地位,而且在实际应用中也发挥着巨大作用,如在数据处理、图算法和各种最优化问题中都能找到它们的影子。下面将详细探讨这三种算法的原理及其在实际编程中的应用。 分治法是将复杂...

    基于能量回归滤波全变分图像自适应去噪算法 图像滤波算法.pdf

    摘要中提到的是一种基于能量回归滤波全变分图像自适应去噪算法,该算法针对传统图像局部方向特性自适应全变分去噪算法存在的问题,即无法保存图像边缘信息和去噪效果及稳定性较差的问题,提出了一种新的解决方案。...

    Criminisi.zip_CRIMINISI 算法_criminisi算法_图片修复matlab_彩色图像修复

    6. **MATLAB实现**:在MATLAB环境中,实现Criminisi算法通常涉及图像处理工具箱中的函数,如imread用于读取图像,imwrite用于保存修复后的图像,以及自定义的函数来实现概率模型和分类器的计算。 在实际应用中,...

    很有用的算法

    贪心算法则在每一步选择中都采取在当前状态下最好或最优的选择,以期望导致结果是全局最好或最优的算法。 6. 分治算法:分治算法的核心思想是将大问题分解成若干个小问题,然后递归地求解这些子问题,再将子问题的...

    算法设计与分析复习资料

    - 确定性:算法中的每一步都是明确且无歧义的。 - 有限性:算法包含有限数量的操作步骤,并能在有限时间内完成。 - **程序**:程序是算法使用某种编程语言的具体实现。程序可能不具备算法的所有特性,比如有限性...

    基于C语言的图像去噪算法设计与实现

    在图像处理领域,去噪是至关重要的一步,它有助于提高图像的质量,使图像中的细节更加清晰,便于后续的分析和处理。本项目“基于C语言的图像去噪算法设计与实现”聚焦于利用C语言这一高效且灵活的编程语言来构建图像...

    图像压缩算法

    9. **压缩与解压缩流程**:在MFC程序中,图像的压缩通常涉及读取图像、执行压缩算法、保存压缩数据;解压缩则是反向过程,从压缩数据中恢复图像。 10. **性能优化**:在实际应用中,还需要考虑算法的执行效率和内存...

    L-M算法(BP的一种改进算法)应用实例.zip_BP_BP L-M_LM_改进BP算法_算法改进

    在每一步迭代中,算法会根据当前的误差梯度和Hessian矩阵的近似值来更新权重。Hessian矩阵是二阶导数矩阵,反映参数变化对误差的影响。当Hessian矩阵近似为正定时,L-M算法接近牛顿法,提供更快的收敛速度;当矩阵...

    [纯C语言 + Win32 API]一步一步写个围棋程序之十:可以下棋了

    10. **持久化存储**:保存和加载游戏进度也是游戏功能的一部分,可以使用文件I/O或者数据库技术来实现。 总的来说,这个项目涵盖了从基本的窗口程序开发到复杂的图形用户交互和游戏逻辑的多个方面。通过实践这个...

    蚁群算法仿真

    在蚁群算法中,每个蚂蚁代表一个可能的解,它们在解空间中随机行走,选择下一步行动的概率受当前路径上信息素浓度和距离因素的影响。信息素是蚂蚁之间通信的媒介,积累在路径上,随着时间逐渐挥发。强的信息素浓度...

    数据结构FLASH算法演示

    在每一步中,算法都会检查添加的边是否会形成环路,如果会,则跳过该边。通过这种方式,算法最终构建出一个连接所有顶点且总权值最小的树。 **树、森林和二叉树的转换**是指在不同的树结构之间进行转换的过程。例如...

Global site tag (gtag.js) - Google Analytics