c – 了解格子

我一直在研究一个计算机科学问题,这个问题在第一次面试后非常成功地进行了第二次面试代码测试.否则,我会认为这是一个扣篮.

基本上,我是在2小时内使用格子细胞实施扫雷.

如果它是1X1,则有一个单元格.

然后,如果它是2X2,则一个细胞有四个细胞(儿童?),每个细胞与父母双重链接.此外,这2个孩子彼此双重联系.另外两个孩子也是如此.

从子单元格遍历到另一个子单元格意味着必须要么跳转到下一个chid链接(兄弟姐妹),要么首先遍历父项,然后再遍历到另一个子链接对集合中的目标子项. (注意:树的想法只是我的想法,不是要求)

我的一般想法是建立一个模式创建机制,然后根据深度参数隐式地变得越来越大.一种树状结构似乎是最好的方法.

这似乎很容易.但我无法理解模式创建逻辑:

具有多个孩子的树结构很容易(八叉树,四叉树,二叉树等),但是提出了一个优雅的系统,每当父母产生多个孩子时,孩子们也只隐含地链接到特定的兄弟姐妹.对我来说是一个令人头疼的事.所以,基本上,根据我的想法,根是格子图的中心,最远的子节点在边缘.

此外,格子细胞可能有许多方面我不明白.我在互联网上挖掘,试图找到一个基础解释,说明为什么或如何有用.我在这个主题上找到了一个关于逻辑基础的初级读物:基于这些原理的部分有序集,幂集,反射性和格子图,例如Hasse图.

但是,对我来说这仍然不够好:没有C甚至是伪代码示例.

我理解哈希表,链表,反转链表(递归/迭代),二叉树(平衡/不平衡),向量,字符串,反转等(所有基本的基础知识). Trig,线性代数,四元数.一些计算.以及大量的图形编程技巧/技巧.我甚至从头开始编写了两个游戏引擎,但简单的格子问题让我感到震惊.我很尴尬.我想尽可能多地学习格子,所以我再也不会像那样被烧掉了.但是,我需要的文档很难找到.

我正在寻找一个关于格子主题的好的入门/教程(因为它与编写C算法有关) – 希望能够为我(从初学者开始)向我伸出援助之手,就像典型的Sam在21天内自学C一样,或者其他的东西.由于格子似乎是非常先进的主题的中间,这可能是不可能的.

如果不是教程,如果你们中的任何人能够给我关于这个主题的知识,我将非常感激.

谢谢.

解决方法

混淆源于对格子这个词的误导性使用:在数学中,格子是一个poset,其中每两个元素都有一个lub(最小上界)和一个glb(最大下界).游戏’树'(节点是棋盘的状态,由于树的独特路径属性,移动显然没有任何glb的边缘),即使你加入通过不同移动顺序到达的相同状态(在这种情况下)如果从给定的状态,你可以达到两个不同的最终状态,那么树就会变成有向图.十年来我没有玩过扫雷,但我的印象是有可能以这种方式结束游戏.因此,您需要考虑的基础数据结构是有向的(可能是非循环的)图形,有时在数学意义上是一个点阵(忽略边缘上的方向),但并非总是如此.

相关文章

一.C语言中的static关键字 在C语言中,static可以用来修饰局...
浅谈C/C++中的指针和数组(二) 前面已经讨论了指针...
浅谈C/C++中的指针和数组(一)指针是C/C++...
从两个例子分析C语言的声明 在读《C专家编程》一书的第三章时...
C语言文件操作解析(一)在讨论C语言文件操作之前,先了解一下...
C语言文件操作解析(三) 在前面已经讨论了文件打开操作,下面...